├── .gitattributes ├── .github ├── FUNDING.yml └── workflows │ ├── gdscript-formatter.yml │ └── update-submodule.yml ├── .gitignore ├── LICENSE ├── README.md ├── addons └── behaviour_toolkit │ ├── behaviour_toolkit.gd │ ├── behaviour_toolkit.gd.uid │ ├── behaviour_tree │ ├── bt_behaviour.gd │ ├── bt_behaviour.gd.uid │ ├── bt_composite.gd │ ├── bt_composite.gd.uid │ ├── bt_decorator.gd │ ├── bt_decorator.gd.uid │ ├── bt_leaf.gd │ ├── bt_leaf.gd.uid │ ├── bt_leaf_integration.gd │ ├── bt_leaf_integration.gd.uid │ ├── bt_root.gd │ ├── bt_root.gd.uid │ ├── composites │ │ ├── bt_integrated_fsm.gd │ │ ├── bt_integrated_fsm.gd.uid │ │ ├── bt_random.gd │ │ ├── bt_random.gd.uid │ │ ├── bt_random_selector.gd │ │ ├── bt_random_selector.gd.uid │ │ ├── bt_random_sequence.gd │ │ ├── bt_random_sequence.gd.uid │ │ ├── bt_selector.gd │ │ ├── bt_selector.gd.uid │ │ ├── bt_sequence.gd │ │ ├── bt_sequence.gd.uid │ │ ├── bt_simple_parallel.gd │ │ └── bt_simple_parallel.gd.uid │ ├── decorators │ │ ├── decorator_always_fail.gd │ │ ├── decorator_always_fail.gd.uid │ │ ├── decorator_always_succeed.gd │ │ ├── decorator_always_succeed.gd.uid │ │ ├── decorator_inverter.gd │ │ ├── decorator_inverter.gd.uid │ │ ├── decorator_limiter.gd │ │ ├── decorator_limiter.gd.uid │ │ ├── decorator_repeat.gd │ │ └── decorator_repeat.gd.uid │ └── leaves │ │ ├── leaf_call.gd │ │ ├── leaf_call.gd.uid │ │ ├── leaf_condition.gd │ │ ├── leaf_condition.gd.uid │ │ ├── leaf_event.gd │ │ ├── leaf_event.gd.uid │ │ ├── leaf_print.gd │ │ ├── leaf_print.gd.uid │ │ ├── leaf_signal.gd │ │ ├── leaf_signal.gd.uid │ │ ├── leaf_tween.gd │ │ ├── leaf_tween.gd.uid │ │ ├── leaf_wait.gd │ │ └── leaf_wait.gd.uid │ ├── blackboard.gd │ ├── blackboard.gd.uid │ ├── finite_state_machine │ ├── fsm.gd │ ├── fsm.gd.uid │ ├── fsm_state.gd │ ├── fsm_state.gd.uid │ ├── fsm_state_integrated_bt.gd │ ├── fsm_state_integrated_bt.gd.uid │ ├── fsm_state_integration_return.gd │ ├── fsm_state_integration_return.gd.uid │ ├── fsm_transition.gd │ └── fsm_transition.gd.uid │ ├── icons │ ├── Add.svg │ ├── Add.svg.import │ ├── BTBehaviour.svg │ ├── BTBehaviour.svg.import │ ├── BTComposite.svg │ ├── BTComposite.svg.import │ ├── BTCompositeIntegration.svg │ ├── BTCompositeIntegration.svg.import │ ├── BTCompositeRandom.svg │ ├── BTCompositeRandom.svg.import │ ├── BTCompositeRandomSelector.svg │ ├── BTCompositeRandomSelector.svg.import │ ├── BTCompositeRandomSequence.svg │ ├── BTCompositeRandomSequence.svg.import │ ├── BTCompositeSelector.svg │ ├── BTCompositeSelector.svg.import │ ├── BTCompositeSequence.svg │ ├── BTCompositeSequence.svg.import │ ├── BTDecorator.svg │ ├── BTDecorator.svg.import │ ├── BTDecoratorFail.svg │ ├── BTDecoratorFail.svg.import │ ├── BTDecoratorLimiter.svg │ ├── BTDecoratorLimiter.svg.import │ ├── BTDecoratorNot.svg │ ├── BTDecoratorNot.svg.import │ ├── BTDecoratorRepeat.svg │ ├── BTDecoratorRepeat.svg.import │ ├── BTDecoratorSucceed.svg │ ├── BTDecoratorSucceed.svg.import │ ├── BTLeaf.svg │ ├── BTLeaf.svg.import │ ├── BTLeafCall.svg │ ├── BTLeafCall.svg.import │ ├── BTLeafCondition.svg │ ├── BTLeafCondition.svg.import │ ├── BTLeafIntegration.svg │ ├── BTLeafIntegration.svg.import │ ├── BTLeafPrint.svg │ ├── BTLeafPrint.svg.import │ ├── BTLeafSignal.svg │ ├── BTLeafSignal.svg.import │ ├── BTLeafTween.svg │ ├── BTLeafTween.svg.import │ ├── BTLeafWait.svg │ ├── BTLeafWait.svg.import │ ├── BTRoot.svg │ ├── BTRoot.svg.import │ ├── BTSimpleParallel.svg │ ├── BTSimpleParallel.svg.import │ ├── Blackboard.svg │ ├── Blackboard.svg.import │ ├── EditorBTRoot.svg │ ├── EditorBTRoot.svg.import │ ├── EditorFiniteStateMachine.svg │ ├── EditorFiniteStateMachine.svg.import │ ├── FSMState.svg │ ├── FSMState.svg.import │ ├── FSMStateIntegration.svg │ ├── FSMStateIntegration.svg.import │ ├── FSMStateIntegrationReturn.svg │ ├── FSMStateIntegrationReturn.svg.import │ ├── FSMTransition.svg │ ├── FSMTransition.svg.import │ ├── FiniteStateMachine.svg │ ├── FiniteStateMachine.svg.import │ ├── Gear.svg │ ├── Gear.svg.import │ ├── Help.svg │ ├── Help.svg.import │ ├── Logo.png │ ├── Logo.png.import │ ├── Logo.svg │ ├── Logo.svg.import │ ├── MainIcon.svg.import │ ├── Search.svg │ ├── Search.svg.import │ ├── icon.png │ ├── icon.png.import │ ├── placeholder.svg │ └── placeholder.svg.import │ ├── inspector_plugin.gd │ ├── inspector_plugin.gd.uid │ ├── plugin.cfg │ ├── plugin.gd │ ├── plugin.gd.uid │ └── ui │ ├── toolkit_ui.gd │ ├── toolkit_ui.gd.uid │ ├── toolkit_ui.tscn │ └── utils │ ├── update_manager.gd │ └── update_manager.gd.uid ├── docs ├── documentation.md ├── screenshot-ui.PNG ├── screenshot-ui.PNG.import ├── thumbnail.svg └── thumbnail.svg.import ├── examples ├── assets │ ├── actors │ │ ├── tile_0084.png.import │ │ ├── tile_0085.png.import │ │ ├── tile_0086.png.import │ │ ├── tile_0087.png.import │ │ ├── tile_0088.png.import │ │ ├── tile_0108.png.import │ │ ├── tile_0109.png.import │ │ ├── tile_0110.png.import │ │ ├── tile_0111.png.import │ │ ├── tile_0112.png.import │ │ ├── tile_0121.png.import │ │ ├── tiny_barbarian.png │ │ ├── tiny_barbarian.png.import │ │ ├── tiny_blacksmith.png │ │ ├── tiny_blacksmith.png.import │ │ ├── tiny_crab.png │ │ ├── tiny_crab.png.import │ │ ├── tiny_cyclops.png │ │ ├── tiny_cyclops.png.import │ │ ├── tiny_evil wizard.png │ │ ├── tiny_evil wizard.png.import │ │ ├── tiny_ghost.png │ │ ├── tiny_ghost.png.import │ │ ├── tiny_goohst.png │ │ ├── tiny_goohst.png.import │ │ ├── tiny_knight.png │ │ ├── tiny_knight.png.import │ │ ├── tiny_ranger.png │ │ ├── tiny_ranger.png.import │ │ ├── tiny_viking.png │ │ ├── tiny_viking.png.import │ │ ├── tiny_village.png │ │ ├── tiny_village.png.import │ │ ├── tiny_wizard.png │ │ └── tiny_wizard.png.import │ ├── coin.png │ ├── coin.png.import │ ├── kenney_tinytown.png │ ├── kenney_tinytown.png.import │ └── tileset.tres ├── behaviour_example │ ├── Camera.gd │ ├── Camera.gd.uid │ ├── NPCs │ │ ├── leaves │ │ │ ├── IsAlive.gd │ │ │ ├── IsAlive.gd.uid │ │ │ ├── IsHydrated.gd │ │ │ ├── IsHydrated.gd.uid │ │ │ ├── RandomPOI.gd │ │ │ ├── RandomPOI.gd.uid │ │ │ ├── UseBottle.gd │ │ │ ├── UseBottle.gd.uid │ │ │ ├── WalkToWell.gd │ │ │ └── WalkToWell.gd.uid │ │ ├── states │ │ │ ├── state_ghost.gd │ │ │ ├── state_ghost.gd.uid │ │ │ ├── state_idle.gd │ │ │ ├── state_idle.gd.uid │ │ │ ├── state_refreshing.gd │ │ │ ├── state_refreshing.gd.uid │ │ │ ├── state_transformt.gd │ │ │ ├── state_transformt.gd.uid │ │ │ ├── state_walking.gd │ │ │ ├── state_walking.gd.uid │ │ │ ├── trans_on_revive.gd │ │ │ ├── trans_on_revive.gd.uid │ │ │ ├── trans_on_start_walking.gd │ │ │ ├── trans_on_start_walking.gd.uid │ │ │ ├── trans_on_stop_walking.gd │ │ │ └── trans_on_stop_walking.gd.uid │ │ └── villager.tscn │ ├── actor │ │ ├── actor.gd │ │ └── actor.gd.uid │ ├── behaviour_example.gd │ ├── behaviour_example.gd.uid │ ├── behaviour_example.tscn │ └── global_blackboard.tres └── fsm_character_controller │ ├── MrBlacksmith.gd │ ├── MrBlacksmith.gd.uid │ ├── crab.tscn │ ├── fsm_character_controller.tscn │ ├── mr_blacksmith.tscn │ ├── states │ ├── IDLE.gd │ ├── IDLE.gd.uid │ ├── MOVING.gd │ ├── MOVING.gd.uid │ ├── SPRINTING.gd │ └── SPRINTING.gd.uid │ └── transitions │ ├── onStartMoving.gd │ ├── onStartMoving.gd.uid │ ├── onStartSprinting.gd │ ├── onStartSprinting.gd.uid │ ├── onStopMoving.gd │ ├── onStopMoving.gd.uid │ ├── onStopSprinting.gd │ └── onStopSprinting.gd.uid ├── icon.svg ├── icon.svg.import ├── project.godot └── script_templates ├── BTComposite ├── new_composite.gd └── new_composite.gd.uid ├── BTDecorator ├── new_decorator.gd └── new_decorator.gd.uid ├── BTLeaf ├── new_leaf.gd └── new_leaf.gd.uid ├── FSMState ├── new_state.gd └── new_state.gd.uid └── FSMTransition ├── new_transition.gd └── new_transition.gd.uid /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize EOL for all files that Git considers text files. 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: pat02 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 15 | -------------------------------------------------------------------------------- /.github/workflows/gdscript-formatter.yml: -------------------------------------------------------------------------------- 1 | # This workflow will format all GDScript files in the repository using GDToolkit 2 | 3 | name: GDScript Formatter 4 | 5 | on: workflow_dispatch 6 | 7 | jobs: 8 | build: 9 | 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v2 15 | 16 | - name: Set up Python 3.9 17 | uses: actions/setup-python@v2 18 | with: 19 | python-version: 3.9 20 | 21 | - name: Install dependencies 22 | run: | 23 | python -m pip install --upgrade pip 24 | pip3 install "gdtoolkit==4.*" 25 | 26 | - name: Format with GDToolkit 27 | run: | 28 | # Format all files in the repository 29 | gdformat . 30 | 31 | - name: Commit changes 32 | run: | 33 | git config --global user.name 'GitHub Action' 34 | git config --global user.email 'action@github.com' 35 | 36 | git add -A 37 | git commit -m "Format GDScript files with GDToolkit" 38 | git push 39 | -------------------------------------------------------------------------------- /.github/workflows/update-submodule.yml: -------------------------------------------------------------------------------- 1 | # This workflow will update the submodule branch 2 | 3 | name: Update Submodule Branch 4 | 5 | on: 6 | push: 7 | branches: 8 | - main 9 | 10 | jobs: 11 | submodule: 12 | 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v2 18 | 19 | - name: Setup Git 20 | run: | 21 | git config --global user.name 'GitHub Action' 22 | git config --global user.email 'action@github.com' 23 | git fetch 24 | 25 | - name: Clean Submodule 26 | run: | 27 | git checkout submodule 28 | git rm -r . 29 | 30 | - name: Update from Main 31 | run: | 32 | git checkout main -- addons/behaviour_toolkit 33 | mv addons/behaviour_toolkit/* . 34 | git rm -r addons/behaviour_toolkit 35 | 36 | - name: Commit to Submodule 37 | continue-on-error: true 38 | run: | 39 | git add -A 40 | git commit -am "Updated Submodule from Main" 41 | git push 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Godot 4+ specific ignores 2 | .godot/ 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Pat 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_toolkit.gd: -------------------------------------------------------------------------------- 1 | @icon("res://addons/behaviour_toolkit/icons/Gear.svg") 2 | class_name BehaviourToolkit extends Node 3 | ## Base class for Behaviour Toolkit plugin nodes. 4 | 5 | 6 | enum LogType { 7 | DEFAULT, 8 | WARNING, 9 | ERROR, 10 | } 11 | 12 | 13 | class Logger: 14 | extends BehaviourToolkit 15 | ## Logger class for Behaviour Toolkit plugin. 16 | 17 | ## Main color for logger messages. 18 | const COLOR_MAIN: String = "Orange" 19 | ## Accent color for logger messages. 20 | const COLOR_ACCENT: String = "Blue" 21 | ## Warning color for logger messages. 22 | const COLOR_WARNING: String = "Yellow" 23 | ## Error color for logger messages. 24 | const COLOR_ERROR: String = "Red" 25 | 26 | ## Log a message to the console with the Behaviour Toolkit prefix. 27 | static func say(message: String, caller: Node = null, type: LogType = LogType.DEFAULT) -> void: 28 | var log_message: String 29 | log_message = colorize("[Behaviour Toolkit] ", COLOR_MAIN) 30 | 31 | if not type == LogType.DEFAULT: 32 | var color: String 33 | match type: 34 | LogType.WARNING: 35 | color = COLOR_WARNING 36 | LogType.ERROR: 37 | color = COLOR_ERROR 38 | 39 | log_message += colorize("[" + LogType.keys()[type] + "] ", color) 40 | 41 | if caller != null: 42 | 43 | log_message += colorize(caller.name + " ", COLOR_ACCENT) 44 | 45 | var actor: Node = null 46 | if "actor" in caller: 47 | actor = caller.actor 48 | 49 | if actor: 50 | log_message += colorize("@ " + actor.name + " ", COLOR_ACCENT) 51 | 52 | 53 | log_message += message 54 | 55 | print_rich(log_message) 56 | 57 | ## Colorize a message with a given color tag in BBCode format. 58 | static func colorize(message: String, color: String) -> String: 59 | return "[color=" + color + "]" + message + "[/color]" 60 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_toolkit.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bgf51p6npam1h 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_behaviour.gd: -------------------------------------------------------------------------------- 1 | @icon("res://addons/behaviour_toolkit/icons/BTBehaviour.svg") 2 | class_name BTBehaviour extends BehaviourToolkit 3 | ## Base class for building behaviour nodes in BehaviourToolkit. 4 | ## 5 | ## Behaviours can return [enum BTBehaviour.BTStatus.SUCCESS], 6 | ## [enum BTBehaviour.BTStatus.FAILURE] or [enum BTBehaviour.BTStatus.RUNNING] 7 | ## which control the flow of the behaviours in Behaviour Tree system. 8 | 9 | 10 | enum BTStatus { 11 | SUCCESS, 12 | FAILURE, 13 | RUNNING, 14 | } 15 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_behaviour.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ckc06i2c1qor8 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_composite.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTComposite.svg") 3 | class_name BTComposite extends BTBehaviour 4 | ## Base class to build composite behaviour nodes. 5 | ## 6 | ## Composites can hold multiple behaviour nodes and evalute/execute them 7 | ## based on custom logic based on their return values. 8 | 9 | 10 | ## The leaves under the composite node. 11 | @onready var leaves: Array = get_children() 12 | 13 | 14 | func _get_configuration_warnings() -> PackedStringArray: 15 | var warnings: Array = [] 16 | 17 | var parent = get_parent() 18 | var children = get_children() 19 | 20 | if not parent is BTComposite and not parent is BTRoot and not parent is BTDecorator: 21 | warnings.append("BTComposite node must be a child of BTComposite or BTRoot node.") 22 | 23 | if children.size() == 0: 24 | warnings.append("BTComposite node must have at least one child.") 25 | 26 | if children.size() == 1: 27 | warnings.append("BTComposite node should have more than one child.") 28 | 29 | return warnings 30 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_composite.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bx0jrl2lsjrsr 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_decorator.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTDecorator.svg") 3 | class_name BTDecorator extends BTBehaviour 4 | ## Base class for decorators. 5 | ## 6 | ## Decorators are used to augment the behaviour of a leaf.[br] 7 | ## Think of it as another layer of logic that is executed before the leaf. 8 | 9 | 10 | ## The leaf the decorator is decorating. 11 | @onready var leaf: BTBehaviour = _get_leaf() 12 | 13 | 14 | func _get_leaf() -> BTBehaviour: 15 | if get_child_count() == 0: 16 | return null 17 | 18 | return get_child(0) 19 | 20 | 21 | func _get_configuration_warnings() -> PackedStringArray: 22 | var warnings: Array = [] 23 | 24 | var parent = get_parent() 25 | var children = get_children() 26 | 27 | if not parent is BTComposite and not parent is BTRoot: 28 | warnings.append("Decorator node should be a child of a composite node or the root node.") 29 | 30 | if children.size() == 0: 31 | warnings.append("Decorator node should have a child.") 32 | elif children.size() > 1: 33 | warnings.append("Decorator node should have only one child.") 34 | elif not children[0] is BTBehaviour: 35 | warnings.append("Decorator node should have a BTBehaviour node as a child.") 36 | 37 | return warnings 38 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_decorator.gd.uid: -------------------------------------------------------------------------------- 1 | uid://doxmlla1nmqmf 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_leaf.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTLeaf.svg") 3 | class_name BTLeaf extends BTBehaviour 4 | ## A leaf is where the actual logic that controlls the actor or other nodes 5 | ## is implemented. 6 | ## 7 | ## It is the base class for all leaves and can be extended to implement 8 | ## custom behaviours.[br] 9 | ## The [code]tick(actor: Node, blackboard: Blackboard)[/code] method is called 10 | ## every frame and should return the status. 11 | 12 | 13 | func tick(_delta: float, _actor: Node, _blackboard: Blackboard) -> BTStatus: 14 | return BTStatus.SUCCESS 15 | 16 | 17 | func _get_configuration_warnings() -> PackedStringArray: 18 | var warnings: Array = [] 19 | 20 | var parent = get_parent() 21 | var children = get_children() 22 | 23 | if not parent is BTBehaviour and not parent is BTRoot: 24 | warnings.append("BTLeaf node must be a child of BTBehaviour or BTRoot node.") 25 | 26 | if children.size() > 0: 27 | warnings.append("BTLeaf node must not have any children.") 28 | 29 | return warnings 30 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_leaf.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c584shlo6w6it 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_leaf_integration.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTLeafIntegration.svg") 3 | class_name BTLeafIntegration extends BTLeaf 4 | ## Base class to build [BTLeaf]s that act on [FiniteStateMachine]. 5 | 6 | 7 | @export var state_machine: FiniteStateMachine: 8 | set(value): 9 | state_machine = value 10 | update_configuration_warnings() 11 | 12 | 13 | func _get_configuration_warnings() -> PackedStringArray: 14 | var warnings: Array = [] 15 | 16 | warnings.append_array(super._get_configuration_warnings()) 17 | 18 | if state_machine == null: 19 | warnings.append("No state machine set.") 20 | 21 | return warnings 22 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_leaf_integration.gd.uid: -------------------------------------------------------------------------------- 1 | uid://31vloxyg6te5 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/bt_root.gd.uid: -------------------------------------------------------------------------------- 1 | uid://d11c6gwrjou0w 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_integrated_fsm.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTCompositeIntegration.svg") 3 | class_name BTIntegratedFSM extends BTComposite 4 | ## A composite behaviour node that allows to integrate [FiniteStateMachine] 5 | ## in a behaviour tree by handling FSM node. 6 | ## 7 | ## To nest a FSM you need to add a [FiniteStateMachine] as a first child of 8 | ## [BTIntegratedFSM]. When this behaviour is evaluated the child FSM 9 | ## is set to active. 10 | ## [br][br] 11 | ## After the FSM is started it returns status 12 | ## [enum BTBehaviour.BTStatus.RUNNING]. If FSM return 13 | ## [enum BTBehaviour.BTStatus.SUCCESS] or [enum BTBehaviour.BTStatus.FAILURE] 14 | ## the child FSM is stopped. 15 | 16 | 17 | var state_machine: FiniteStateMachine = null 18 | 19 | 20 | func _ready(): 21 | if not Engine.is_editor_hint(): 22 | state_machine = _get_machine() 23 | 24 | 25 | 26 | func tick(_delta: float, _actor: Node, _blackboard: Blackboard) -> BTStatus: 27 | if state_machine.active == false: 28 | state_machine.start() 29 | 30 | if not state_machine.current_bt_status == BTStatus.RUNNING: 31 | state_machine.active = false 32 | 33 | return state_machine.current_bt_status 34 | 35 | 36 | func _get_machine() -> FiniteStateMachine: 37 | if get_child_count() == 0: 38 | return null 39 | else: 40 | return get_child(0) 41 | 42 | 43 | func _get_configuration_warnings() -> PackedStringArray: 44 | var warnings: Array = [] 45 | var children = get_children() 46 | 47 | if children.size() == 0: 48 | warnings.append("BTIntegratedFSM must have a child node. The first child will be used as the state machine.") 49 | 50 | if children.size() > 1: 51 | warnings.append("BTIntegratedFSM can only have one child node. The first child will be used as the state machine.") 52 | 53 | if children.size() == 1: 54 | if not children[0] is FiniteStateMachine: 55 | warnings.append("BTIntegratedFSM's child node must be a FiniteStateMachine. The first child will be used as the state machine.") 56 | 57 | return warnings 58 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_integrated_fsm.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bpln78cwmomyr 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_random.gd: -------------------------------------------------------------------------------- 1 | @icon("res://addons/behaviour_toolkit/icons/BTCompositeRandom.svg") 2 | class_name BTRandom extends BTComposite 3 | ## Randomly selects a child to run. 4 | 5 | 6 | @export var use_seed: bool = false 7 | @export var seed: String = "" 8 | 9 | 10 | var rng = RandomNumberGenerator.new() 11 | var active_leave: BTBehaviour 12 | 13 | 14 | func _ready(): 15 | if use_seed: 16 | rng.seed = hash(seed) 17 | 18 | 19 | func tick(delta: float, actor: Node, blackboard: Blackboard): 20 | if active_leave == null: 21 | active_leave = leaves[rng.randi() % leaves.size()] 22 | 23 | var response = active_leave.tick(delta, actor, blackboard) 24 | 25 | if response == BTStatus.RUNNING: 26 | return response 27 | 28 | active_leave = null 29 | return response 30 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_random.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c6si2venemcbd 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_random_selector.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTCompositeRandomSelector.svg") 3 | class_name BTRandomSelector extends BTComposite 4 | ## The selector composite but with a random order of the leaves. 5 | 6 | 7 | var is_shuffled: bool = false 8 | var current_leaf: int = 0 9 | 10 | 11 | func tick(delta: float, actor: Node, blackboard: Blackboard): 12 | if not is_shuffled: 13 | leaves.shuffle() 14 | 15 | if current_leaf > leaves.size() -1: 16 | current_leaf = 0 17 | is_shuffled = false 18 | return BTStatus.FAILURE 19 | 20 | var response = leaves[current_leaf].tick(delta, actor, blackboard) 21 | 22 | if response == BTStatus.SUCCESS: 23 | current_leaf = 0 24 | is_shuffled = false 25 | return response 26 | 27 | if response == BTStatus.RUNNING: 28 | return response 29 | 30 | current_leaf += 1 31 | return BTStatus.RUNNING 32 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_random_selector.gd.uid: -------------------------------------------------------------------------------- 1 | uid://fby1n4bgse0d 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_random_sequence.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTCompositeRandomSequence.svg") 3 | class_name BTRandomSequence extends BTComposite 4 | ## The squence composite but with a random order of the leaves. 5 | 6 | 7 | var is_shuffled: bool = false 8 | var current_leaf: int = 0 9 | 10 | 11 | func tick(delta: float, actor: Node, blackboard: Blackboard): 12 | if not is_shuffled: 13 | leaves.shuffle() 14 | 15 | if current_leaf > leaves.size() -1: 16 | current_leaf = 0 17 | is_shuffled = false 18 | return BTStatus.SUCCESS 19 | 20 | var response = leaves[current_leaf].tick(delta, actor, blackboard) 21 | 22 | if response == BTStatus.RUNNING: 23 | return response 24 | 25 | if response == BTStatus.FAILURE: 26 | current_leaf = 0 27 | is_shuffled = false 28 | return response 29 | 30 | current_leaf += 1 31 | return BTStatus.RUNNING 32 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_random_sequence.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dad82i0b0483q 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_selector.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTCompositeSelector.svg") 3 | class_name BTSelector extends BTComposite 4 | ## Selects the first child that succeeds, or fails if none do. 5 | 6 | 7 | var current_leaf: int = 0 8 | 9 | 10 | func tick(delta: float, actor: Node, blackboard: Blackboard): 11 | if current_leaf > leaves.size() -1: 12 | current_leaf = 0 13 | return BTStatus.FAILURE 14 | 15 | var response = leaves[current_leaf].tick(delta, actor, blackboard) 16 | 17 | if response == BTStatus.SUCCESS: 18 | current_leaf = 0 19 | return response 20 | 21 | if response == BTStatus.RUNNING: 22 | return response 23 | 24 | current_leaf += 1 25 | return BTStatus.RUNNING 26 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_selector.gd.uid: -------------------------------------------------------------------------------- 1 | uid://8rcyavsdmew5 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_sequence.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTCompositeSequence.svg") 3 | class_name BTSequence extends BTComposite 4 | ## A sequence node will return success if all of its children return success. 5 | 6 | 7 | var current_leaf: int = 0 8 | 9 | 10 | func tick(delta: float, actor: Node, blackboard: Blackboard): 11 | if current_leaf > leaves.size() -1: 12 | current_leaf = 0 13 | return BTStatus.SUCCESS 14 | 15 | var response = leaves[current_leaf].tick(delta, actor, blackboard) 16 | 17 | if response == BTStatus.RUNNING: 18 | return response 19 | 20 | if response == BTStatus.FAILURE: 21 | current_leaf = 0 22 | return response 23 | 24 | 25 | current_leaf += 1 26 | return BTStatus.RUNNING 27 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_sequence.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dpr2xa1e5hy8u 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_simple_parallel.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTSimpleParallel.svg") 3 | class_name BTSimpleParallel extends BTComposite 4 | ## Executes all children in parallel, and returns SUCCESS depending on the 5 | ## policy. It returns FAILURE if any child returns FAILURE. 6 | 7 | 8 | enum ParallelPolicy { 9 | SUCCESS_ON_ALL, ## Returns SUCCESS if all children return SUCCESS. 10 | SUCCESS_ON_ONE, ## Returns SUCCESS if any child returns SUCCESS. 11 | } 12 | 13 | 14 | ## Select when to return SUCCESS. 15 | @export var policy: ParallelPolicy = ParallelPolicy.SUCCESS_ON_ALL 16 | ## If true, children that have already returned SUCCESS will not be ticked again, until one of the children returns FAILURE or the composite is reset. 17 | @export var synchronize: bool = false 18 | 19 | 20 | @onready var responses: Dictionary = {} 21 | 22 | 23 | func tick(delta: float, actor: Node, blackboard: Blackboard): 24 | var leave_counter = 0 25 | for leave in leaves: 26 | # If the Parrallel is synchronized, skip leaves that have already returned SUCCESS. 27 | if synchronize and (responses.get(leave_counter) == BTStatus.SUCCESS): 28 | leave_counter += 1 29 | continue 30 | 31 | var response = leave.tick(delta, actor, blackboard) 32 | responses[leave_counter] = response 33 | leave_counter += 1 34 | 35 | # Abort if any child returns FAILURE. 36 | if response == BTStatus.FAILURE: 37 | responses.clear() 38 | return BTStatus.FAILURE 39 | 40 | if policy == ParallelPolicy.SUCCESS_ON_ONE: 41 | if response == BTStatus.SUCCESS: 42 | responses.clear() 43 | return BTStatus.SUCCESS 44 | 45 | if policy == ParallelPolicy.SUCCESS_ON_ALL: 46 | var index = 0 47 | for response in responses.values(): 48 | if response != BTStatus.SUCCESS: 49 | return BTStatus.RUNNING 50 | 51 | index += 1 52 | 53 | responses.clear() 54 | return BTStatus.SUCCESS 55 | 56 | return BTStatus.RUNNING 57 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/composites/bt_simple_parallel.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bsjk440mp80ij 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_always_fail.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTDecoratorFail.svg") 3 | class_name BTAlwaysFail extends BTDecorator 4 | ## The leaf will always fail after running. 5 | 6 | 7 | func tick(delta: float, actor: Node, blackboard: Blackboard): 8 | var response = leaf.tick(delta, actor, blackboard) 9 | 10 | if response == BTStatus.RUNNING: 11 | return BTStatus.RUNNING 12 | 13 | return BTStatus.FAILURE 14 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_always_fail.gd.uid: -------------------------------------------------------------------------------- 1 | uid://do841lxmfjeev 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_always_succeed.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTDecoratorSucceed.svg") 3 | class_name BTAlwaysSucceed extends BTDecorator 4 | ## The leaf will always succeed after running. 5 | 6 | 7 | func tick(delta: float, actor: Node, blackboard: Blackboard): 8 | var response = leaf.tick(delta, actor, blackboard) 9 | 10 | if response == BTStatus.RUNNING: 11 | return BTStatus.RUNNING 12 | 13 | return BTStatus.SUCCESS 14 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_always_succeed.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dxqf7gmkqfe2e 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_inverter.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTDecoratorNot.svg") 3 | class_name BTInverter extends BTDecorator 4 | ## The result of the leaf is inverted. 5 | 6 | 7 | func tick(delta: float, actor: Node, blackboard: Blackboard): 8 | var response = leaf.tick(delta, actor, blackboard) 9 | 10 | if response == BTStatus.SUCCESS: 11 | return BTStatus.FAILURE 12 | 13 | if response == BTStatus.FAILURE: 14 | return BTStatus.SUCCESS 15 | 16 | return BTStatus.RUNNING 17 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_inverter.gd.uid: -------------------------------------------------------------------------------- 1 | uid://qkhn2rt2l61f 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_limiter.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTDecoratorLimiter.svg") 3 | class_name BTLimiter extends BTDecorator 4 | ## Limits the number of times a leaf can be run. (The leaf will fully run, 5 | ## before triggering the limit.) 6 | 7 | 8 | @export var limit: int = 1 9 | @export var on_limit: BTStatus = BTStatus.FAILURE 10 | 11 | 12 | @onready var cache_key = 'limiter_%s' % self.get_instance_id() 13 | 14 | 15 | func tick(delta: float, actor: Node, blackboard: Blackboard): 16 | var current_count = blackboard.get_value(cache_key) 17 | if current_count == null: 18 | current_count = 0 19 | 20 | if current_count < limit: 21 | var response = leaf.tick(delta, actor, blackboard) 22 | if response == BTStatus.RUNNING: 23 | return response 24 | 25 | blackboard.set_value(cache_key, current_count + 1) 26 | return response 27 | else: 28 | return on_limit 29 | 30 | 31 | func reset(actor: Node, blackboard: Blackboard): 32 | blackboard.set_value(cache_key, 0) 33 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_limiter.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dynb52p6rwe5u 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_repeat.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTDecoratorRepeat.svg") 3 | class_name BTRepeat extends BTDecorator 4 | ## Repeats the leaf a number of times. 5 | 6 | 7 | @export var repetition: int = 1 8 | @export var on_limit: BTStatus = BTStatus.FAILURE 9 | 10 | 11 | @onready var cache_key = 'repeat_%s' % self.get_instance_id() 12 | 13 | 14 | func tick(delta: float, actor: Node, blackboard: Blackboard): 15 | var current_count = blackboard.get_value(cache_key) 16 | if current_count == null: 17 | current_count = 0 18 | 19 | if current_count < repetition: 20 | var response = leaf.tick(delta, actor, blackboard) 21 | 22 | if response == BTStatus.RUNNING: 23 | return response 24 | 25 | if response == BTStatus.SUCCESS: 26 | current_count += 1 27 | blackboard.set_value(cache_key, current_count) 28 | return BTStatus.RUNNING 29 | else: 30 | return response 31 | else: 32 | blackboard.set_value(cache_key, 0) 33 | return on_limit 34 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/decorators/decorator_repeat.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bts0yymqfnj5o 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_call.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTLeafCall.svg") 3 | class_name LeafCall extends BTLeaf 4 | ## Leaf that calls a method on a target node. 5 | ## 6 | ## The target can be the actor, the blackboard or a custom node. 7 | ## Returns FAILURE if the method is not found on the target node. 8 | 9 | 10 | ## The target type of the call. Can be the actor, the blackboard or a custom node. 11 | enum CallTarget { 12 | ACTOR, ## The actor node set on the BTRoot node. 13 | BLACKBOARD, ## The blackboard node set on the BTRoot node. 14 | CUSTOM, ## A custom node set on the custom_target variable. 15 | } 16 | 17 | 18 | ## The method to call on the target node. 19 | @export var method: StringName: 20 | set(value): 21 | method = value 22 | update_configuration_warnings() 23 | ## The arguments to pass to the method. 24 | @export var arguments: Array = [] 25 | 26 | @export_category("Target") 27 | ## The target type of the call. Can be the actor, the blackboard or a custom node. 28 | @export var target_type: CallTarget = CallTarget.ACTOR: 29 | set(value): 30 | target_type = value 31 | update_configuration_warnings() 32 | ## The custom node to call the method on. Only used if target_type is set to CallTarget.CUSTOM. 33 | @export var custom_target: Node: 34 | set(value): 35 | custom_target = value 36 | update_configuration_warnings() 37 | 38 | 39 | func tick(delta: float, actor: Node, blackboard: Blackboard): 40 | var target 41 | 42 | match target_type: 43 | CallTarget.ACTOR: 44 | target = actor 45 | CallTarget.BLACKBOARD: 46 | target = blackboard 47 | CallTarget.CUSTOM: 48 | target = custom_target 49 | 50 | if target.has_method(method): 51 | target.callv(method, arguments) 52 | else: 53 | print("Method " + method + " not found on target " + target.to_string()) 54 | return BTStatus.FAILURE 55 | 56 | return BTStatus.SUCCESS 57 | 58 | 59 | func _get_configuration_warnings() -> PackedStringArray: 60 | var warnings: Array = [] 61 | 62 | warnings.append_array(super._get_configuration_warnings()) 63 | 64 | if method == "": 65 | warnings.append("Method is not set.") 66 | 67 | if target_type == CallTarget.CUSTOM and custom_target == null: 68 | warnings.append("Target type is set to CUSTOM but no custom target is set.") 69 | 70 | return warnings 71 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_call.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bhahgsy1nt5yj 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_condition.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dnpsgru7j5ctv 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_event.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name LeafFSMEvent extends BTLeafIntegration 3 | ## This node fires an event on a specified state machine. 4 | 5 | 6 | @export var event: StringName: 7 | set(value): 8 | event = value 9 | update_configuration_warnings() 10 | @export var return_status: BTStatus = BTStatus.SUCCESS 11 | 12 | 13 | func tick(_delta: float, _actor: Node, _blackboard: Blackboard) -> BTStatus: 14 | state_machine.fire_event(event) 15 | return return_status 16 | 17 | 18 | func _get_configuration_warnings() -> PackedStringArray: 19 | var warnings: Array = [] 20 | 21 | warnings.append_array(super._get_configuration_warnings()) 22 | 23 | if event == "": 24 | warnings.append("Event is empty.") 25 | 26 | return warnings 27 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_event.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dl4tsevokxbqg 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_print.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTLeafPrint.svg") 3 | class_name LeafPrint extends BTLeaf 4 | ## Leaf that prints a custom text in console. 5 | 6 | 7 | @export var custom_text: String 8 | @export var success: bool = true 9 | 10 | 11 | func tick(delta: float, actor: Node, blackboard: Blackboard): 12 | if custom_text != "": 13 | print(custom_text) 14 | else: 15 | print("Hello World!") 16 | 17 | if success: 18 | return BTStatus.SUCCESS 19 | 20 | return BTStatus.FAILURE 21 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_print.gd.uid: -------------------------------------------------------------------------------- 1 | uid://hrqpi0abma58 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_signal.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTLeafSignal.svg") 3 | class_name LeafSignal extends BTLeaf 4 | ## Leaf that emits a signal with optional array of arguments. 5 | ## 6 | ## [LeafSignal] if `target_type` is set to `Self` emits it's own signal 7 | ## `leaf_emitted(arguments_array)` but can also emit signals from the `actor`, 8 | ## or any `Custom` [Node]. 9 | 10 | 11 | ## The target type from which to emit signal. 12 | ## Can be the actor, a custom node or [LeafSignal] own signal. 13 | enum EmitTarget { 14 | ACTOR, ## The actor node set on the BTRoot node. 15 | CUSTOM, ## A custom node set on the custom_target variable. 16 | SELF, ## Don't emit signals from any target. 17 | } 18 | 19 | 20 | ## Signal emitted on every [code]tick()[/code] by the [LeafSignal] 21 | ## if `EmitTarget.SELF` enabled. 22 | signal leaf_emitted(arguments_array: Array) 23 | 24 | 25 | ## The signal name to call on the target node. 26 | @export var signal_name: StringName: 27 | set(value): 28 | signal_name = value 29 | update_configuration_warnings() 30 | ## Array of arguments emitted with the [code]leaf_emitted/code] signal. 31 | @export var arguments: Array = [] 32 | 33 | @export_category("Target") 34 | ## The target type to emit signal. Can be the actor, a custom node 35 | ## or [LeafSignal] own signal `leaf_emitted` (When target type is `Self`). 36 | @export var target_type: EmitTarget = EmitTarget.SELF: 37 | set(value): 38 | target_type = value 39 | update_configuration_warnings() 40 | ## The custom node to call the method on. Only used if target_type 41 | ## is set toCallTarget.CUSTOM. 42 | @export var custom_target: Node: 43 | set(value): 44 | custom_target = value 45 | update_configuration_warnings() 46 | 47 | 48 | 49 | 50 | func tick(_delta: float, _actor: Node, _blackboard: Blackboard) -> BTStatus: 51 | var target: Node 52 | 53 | match target_type: 54 | EmitTarget.ACTOR: 55 | target = _actor 56 | EmitTarget.CUSTOM: 57 | target = custom_target 58 | EmitTarget.SELF: 59 | emit_signal("leaf_emitted", arguments) 60 | return BTStatus.SUCCESS 61 | 62 | if target.has_signal(signal_name): 63 | target.emit_signal(signal_name, arguments) 64 | else: 65 | print("Signal " + signal_name + " not found on target " + target.to_string()) 66 | return BTStatus.FAILURE 67 | 68 | return BTStatus.SUCCESS 69 | 70 | 71 | func _get_configuration_warnings() -> PackedStringArray: 72 | var warnings: Array = [] 73 | 74 | warnings.append_array(super._get_configuration_warnings()) 75 | 76 | if signal_name == "": 77 | warnings.append("Signal is not set.") 78 | 79 | if target_type == EmitTarget.CUSTOM and custom_target == null: 80 | warnings.append("Target type is set to Custom but no custom target is set.") 81 | 82 | return warnings 83 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_signal.gd.uid: -------------------------------------------------------------------------------- 1 | uid://0og5kjn2fpu6 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_tween.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ba52jr7ryaq75 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_wait.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/BTLeafWait.svg") 3 | class_name LeafWait extends BTLeaf 4 | ## Leaf that waits set ammount of calls of [code]tick()[/code] before returning 5 | ## SUCCESS. 6 | 7 | 8 | @export var wait_for_ticks: int = 100 9 | 10 | 11 | var ticks: int = 0 12 | 13 | 14 | func tick(_delta: float, _actor: Node, _blackboard: Blackboard): 15 | if ticks < wait_for_ticks: 16 | ticks += 1 17 | return BTStatus.RUNNING 18 | else: 19 | ticks = 0 20 | return BTStatus.SUCCESS 21 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/behaviour_tree/leaves/leaf_wait.gd.uid: -------------------------------------------------------------------------------- 1 | uid://buvb8uppbyosm 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/blackboard.gd: -------------------------------------------------------------------------------- 1 | @icon("res://addons/behaviour_toolkit/icons/Blackboard.svg") 2 | class_name Blackboard extends Resource 3 | ## A blackboard is a dictionary of key/value pairs that can be used to share 4 | ## data between nodes. 5 | ## 6 | ## [Blackboard] can be used by BT plugin nodes to store and pass the data. 7 | 8 | 9 | ## The blackboard's content stored as a dictionary. 10 | @export var content: Dictionary 11 | 12 | 13 | ## Sets a value in the blackboard. 14 | func set_value(key: StringName, value: Variant) -> void: 15 | content[key] = value 16 | 17 | 18 | ## Returns a value from the blackboard. If the key doesn't exist, returns `null`. 19 | func get_value(key: StringName) -> Variant: 20 | if content.has(key): 21 | return content[key] 22 | else: 23 | return null 24 | 25 | 26 | ## Removes a value from the blackboard. Returns `true` if the key existed, `false` otherwise. 27 | func remove_value(key: StringName) -> bool: 28 | return content.erase(key) 29 | 30 | 31 | ## Clears the blackboard and removes all its values. 32 | func clear() -> void: 33 | content.clear() 34 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/blackboard.gd.uid: -------------------------------------------------------------------------------- 1 | uid://csq05x4oq8uf3 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/finite_state_machine/fsm.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b0bqn8gtyevqu 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/finite_state_machine/fsm_state.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/FSMState.svg") 3 | class_name FSMState extends BehaviourToolkit 4 | ## A state in a [FiniteStateMachine]. This is the base class for all states. 5 | ## 6 | ## It's a basic building block to build full State Machines, only one state 7 | ## held by [FiniteStateMachine] is active, to switch to a different state, 8 | ## a [FSMTransition] must be triggered or you can use FSM methods to switch 9 | ## states manually. 10 | ## To implement your logic you can override the [code]_on_enter, _on_update and 11 | ## _on_exit[/code] methods when extending the node's script. 12 | 13 | 14 | ## List of transitions from this state. 15 | var transitions: Array[FSMTransition] = [] 16 | 17 | 18 | func _ready() -> void: 19 | # Don't run in editor 20 | if Engine.is_editor_hint(): 21 | return 22 | 23 | for transition in get_children(): 24 | if transition is FSMTransition: 25 | transitions.append(transition) 26 | 27 | 28 | ## Executes after the state is entered. 29 | func _on_enter(_actor: Node, _blackboard: Blackboard) -> void: 30 | pass 31 | 32 | 33 | ## Executes every process call, if the state is active. 34 | func _on_update(_delta: float, _actor: Node, _blackboard: Blackboard) -> void: 35 | pass 36 | 37 | 38 | ## Executes before the state is exited. 39 | func _on_exit(_actor: Node, _blackboard: Blackboard) -> void: 40 | pass 41 | 42 | 43 | func _get_configuration_warnings() -> PackedStringArray: 44 | var warnings: Array = [] 45 | 46 | var parent: Node = get_parent() 47 | if not parent is FiniteStateMachine: 48 | warnings.append("FSMState should be a child of a FiniteStateMachine node.") 49 | 50 | return warnings 51 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/finite_state_machine/fsm_state.gd.uid: -------------------------------------------------------------------------------- 1 | uid://k5p6yghm7nrm 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/finite_state_machine/fsm_state_integrated_bt.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bv80dvrqw5nqc 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/finite_state_machine/fsm_state_integration_return.gd: -------------------------------------------------------------------------------- 1 | @icon("res://addons/behaviour_toolkit/icons/FSMStateIntegrationReturn.svg") 2 | class_name FSMStateIntegrationReturn extends FSMState 3 | ## A state in a [FiniteStateMachine] that allows to exit State Machine nested 4 | ## inside of a Behaviour Tree. 5 | ## 6 | ## The state when active returns [enum BTStatus.SUCCESS] or 7 | ## [enum BTStatus.FAILURE] depending on the state's return_status property, 8 | ## which stops execution of FSM attached to [BTIntegratedFSM]. 9 | 10 | enum BTStatus { 11 | SUCCESS, 12 | FAILURE, 13 | } 14 | 15 | @export var return_value: BTStatus = BTStatus.SUCCESS 16 | 17 | 18 | ## Executes after the state is entered. 19 | func _on_enter(_actor: Node, _blackboard: Blackboard) -> void: 20 | get_parent().current_bt_status = return_value 21 | 22 | 23 | ## Executes every process call, if the state is active. 24 | func _on_update(_delta: float, _actor: Node, _blackboard: Blackboard) -> void: 25 | pass 26 | 27 | 28 | ## Executes before the state is exited. 29 | func _on_exit(_actor: Node, _blackboard: Blackboard) -> void: 30 | pass 31 | 32 | 33 | func _get_configuration_warnings() -> PackedStringArray: 34 | var warnings: Array = [] 35 | 36 | warnings.append_array(super._get_configuration_warnings()) 37 | 38 | var fsm_parent: Node = get_parent().get_parent() 39 | 40 | if not fsm_parent is BTIntegratedFSM: 41 | warnings.append("Can only return from a BTIntegratedFSM.") 42 | 43 | return warnings 44 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/finite_state_machine/fsm_state_integration_return.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cwo7ey48dxu21 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/finite_state_machine/fsm_transition.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | @icon("res://addons/behaviour_toolkit/icons/FSMTransition.svg") 3 | class_name FSMTransition extends BehaviourToolkit 4 | ## A transition between two [FSMState]s in a [FiniteStateMachine]. 5 | ## 6 | ## This is the base class for all transitions. To implement your logic you can 7 | ## override the [code]_on_transition[/code] method when extending the node's 8 | ## script.[br] 9 | ## To setup custom conditions you can override the is_valid method.[br] 10 | ## If you want to use events to trigger the transition, set 11 | ## [code]use_event[/code] to true and set the event property to the name 12 | ## of the event you want to listen for. 13 | 14 | 15 | ## The state to transition to. 16 | @export var next_state: FSMState: 17 | set(value): 18 | next_state = value 19 | update_configuration_warnings() 20 | 21 | @export_category("Transition Logic") 22 | ## If true, the FSM will check for the event to trigger the transition. 23 | @export var use_event: bool = false: 24 | set(value): 25 | use_event = value 26 | update_configuration_warnings() 27 | ## The event that triggers the transition. 28 | @export var event: String = "": 29 | set(value): 30 | event = value 31 | update_configuration_warnings() 32 | 33 | 34 | ## Executed when the transition is taken. 35 | func _on_transition(_delta: float, _actor: Node, _blackboard: Blackboard) -> void: 36 | pass 37 | 38 | 39 | ## Evaluates true, if the transition conditions are met. 40 | func is_valid(_actor: Node, _blackboard: Blackboard) -> bool: 41 | return false 42 | 43 | 44 | func is_valid_event(current_event: String) -> bool: 45 | if current_event == "": 46 | return false 47 | 48 | return current_event == event 49 | 50 | 51 | ## Returns which state to transition to, when valid. 52 | func get_next_state() -> FSMState: 53 | return next_state 54 | 55 | 56 | func _get_configuration_warnings() -> PackedStringArray: 57 | var warnings: Array = [] 58 | 59 | var parent: Node = get_parent() 60 | if not parent is FSMState: 61 | warnings.append("FSMTransition should be a child of FSMState.") 62 | 63 | if not next_state: 64 | warnings.append("FSMTransition has no next state.") 65 | 66 | if use_event and event == "": 67 | warnings.append("FSMTransition has no event set.") 68 | 69 | return warnings 70 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/finite_state_machine/fsm_transition.gd.uid: -------------------------------------------------------------------------------- 1 | uid://1h0braq41vwb 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Add.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Add.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwmjaei5wjin2" 6 | path="res://.godot/imported/Add.svg-b8640946cfefb2cca92e911950570ce6.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/Add.svg" 15 | dest_files=["res://.godot/imported/Add.svg-b8640946cfefb2cca92e911950570ce6.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTBehaviour.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 43 | 44 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTBehaviour.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://2r4aaahuqcpy" 6 | path="res://.godot/imported/BTBehaviour.svg-afa2230ba3707fb234ee9ca9709aead7.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTBehaviour.svg" 15 | dest_files=["res://.godot/imported/BTBehaviour.svg-afa2230ba3707fb234ee9ca9709aead7.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTComposite.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b3u8ojxnwvwap" 6 | path="res://.godot/imported/BTComposite.svg-412f185ff8fece951b022e38ba5a7c23.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTComposite.svg" 15 | dest_files=["res://.godot/imported/BTComposite.svg-412f185ff8fece951b022e38ba5a7c23.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTCompositeIntegration.svg: -------------------------------------------------------------------------------- 1 | 2 | 63 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTCompositeIntegration.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ddx7a726xhria" 6 | path="res://.godot/imported/BTCompositeIntegration.svg-9584b35e5fb929ba98b0a02fb58c84cb.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTCompositeIntegration.svg" 15 | dest_files=["res://.godot/imported/BTCompositeIntegration.svg-9584b35e5fb929ba98b0a02fb58c84cb.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTCompositeRandom.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bevi04faxe066" 6 | path="res://.godot/imported/BTCompositeRandom.svg-c18a16f3d816da0799f1e1aa9211e913.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTCompositeRandom.svg" 15 | dest_files=["res://.godot/imported/BTCompositeRandom.svg-c18a16f3d816da0799f1e1aa9211e913.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTCompositeRandomSelector.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bmc67ds148hrp" 6 | path="res://.godot/imported/BTCompositeRandomSelector.svg-0512a3de5f88f3ca2a3841f24ac587eb.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTCompositeRandomSelector.svg" 15 | dest_files=["res://.godot/imported/BTCompositeRandomSelector.svg-0512a3de5f88f3ca2a3841f24ac587eb.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTCompositeRandomSequence.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bwsntsm8f3msh" 6 | path="res://.godot/imported/BTCompositeRandomSequence.svg-190695524eac4f2c5cfb58aafe93cfbb.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTCompositeRandomSequence.svg" 15 | dest_files=["res://.godot/imported/BTCompositeRandomSequence.svg-190695524eac4f2c5cfb58aafe93cfbb.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTCompositeSelector.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dbvuyvumeayw7" 6 | path="res://.godot/imported/BTCompositeSelector.svg-c3f04299814d16ef776f826287ac3a80.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTCompositeSelector.svg" 15 | dest_files=["res://.godot/imported/BTCompositeSelector.svg-c3f04299814d16ef776f826287ac3a80.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTCompositeSequence.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bq7k30hpimryq" 6 | path="res://.godot/imported/BTCompositeSequence.svg-1ad4ef7ed8c22330cea4e8cfd8a06ca5.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTCompositeSequence.svg" 15 | dest_files=["res://.godot/imported/BTCompositeSequence.svg-1ad4ef7ed8c22330cea4e8cfd8a06ca5.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecorator.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 42 | 46 | 50 | 51 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecorator.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cik3abcqm7kr1" 6 | path="res://.godot/imported/BTDecorator.svg-a54f8ee76d81f0aada9ae7822177699f.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTDecorator.svg" 15 | dest_files=["res://.godot/imported/BTDecorator.svg-a54f8ee76d81f0aada9ae7822177699f.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecoratorFail.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 42 | 46 | 50 | 51 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecoratorFail.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://y6kqrnrojvj2" 6 | path="res://.godot/imported/BTDecoratorFail.svg-972bf6cae2c89e592f736f7d1eb80693.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTDecoratorFail.svg" 15 | dest_files=["res://.godot/imported/BTDecoratorFail.svg-972bf6cae2c89e592f736f7d1eb80693.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecoratorLimiter.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 42 | 46 | 50 | 51 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecoratorLimiter.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cko2btxegkbtb" 6 | path="res://.godot/imported/BTDecoratorLimiter.svg-83cc68457edd2d4d6c5a47d3d203e0d1.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTDecoratorLimiter.svg" 15 | dest_files=["res://.godot/imported/BTDecoratorLimiter.svg-83cc68457edd2d4d6c5a47d3d203e0d1.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecoratorNot.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 42 | 47 | 51 | 56 | 57 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecoratorNot.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bmo340f2o6tai" 6 | path="res://.godot/imported/BTDecoratorNot.svg-db308d1bbf533b47c32d25af8f80de5d.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTDecoratorNot.svg" 15 | dest_files=["res://.godot/imported/BTDecoratorNot.svg-db308d1bbf533b47c32d25af8f80de5d.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecoratorRepeat.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://hn65lqk8tero" 6 | path="res://.godot/imported/BTDecoratorRepeat.svg-a5c5ef593dd674d9da616e81f0a70c8c.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTDecoratorRepeat.svg" 15 | dest_files=["res://.godot/imported/BTDecoratorRepeat.svg-a5c5ef593dd674d9da616e81f0a70c8c.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecoratorSucceed.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 42 | 46 | 50 | 51 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTDecoratorSucceed.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dkt0bqwfmkmpq" 6 | path="res://.godot/imported/BTDecoratorSucceed.svg-5ae36e790992843eb08f1aaf9f19c05c.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTDecoratorSucceed.svg" 15 | dest_files=["res://.godot/imported/BTDecoratorSucceed.svg-5ae36e790992843eb08f1aaf9f19c05c.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeaf.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 43 | 47 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeaf.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dws1e5qbg3y2h" 6 | path="res://.godot/imported/BTLeaf.svg-394bab6a37a064c62d9109929dce527d.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTLeaf.svg" 15 | dest_files=["res://.godot/imported/BTLeaf.svg-394bab6a37a064c62d9109929dce527d.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafCall.svg: -------------------------------------------------------------------------------- 1 | 2 | 48 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafCall.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwvb6d7kvo53u" 6 | path="res://.godot/imported/BTLeafCall.svg-0259ff3dd7a45558b84cab026665c30a.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTLeafCall.svg" 15 | dest_files=["res://.godot/imported/BTLeafCall.svg-0259ff3dd7a45558b84cab026665c30a.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafCondition.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://by4ymq46fp1ra" 6 | path="res://.godot/imported/BTLeafCondition.svg-555fd5d45040620aff94ac7db2b23380.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTLeafCondition.svg" 15 | dest_files=["res://.godot/imported/BTLeafCondition.svg-555fd5d45040620aff94ac7db2b23380.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafIntegration.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 43 | 47 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafIntegration.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://iduodgdwxa2w" 6 | path="res://.godot/imported/BTLeafIntegration.svg-974541a1d51285a695521e9140e5e19a.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTLeafIntegration.svg" 15 | dest_files=["res://.godot/imported/BTLeafIntegration.svg-974541a1d51285a695521e9140e5e19a.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafPrint.svg: -------------------------------------------------------------------------------- 1 | 2 | 47 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafPrint.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b45qiy5niriwu" 6 | path="res://.godot/imported/BTLeafPrint.svg-f6f2d7d14c8ddb0bc684a53d76e39548.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTLeafPrint.svg" 15 | dest_files=["res://.godot/imported/BTLeafPrint.svg-f6f2d7d14c8ddb0bc684a53d76e39548.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafSignal.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 39 | 40 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafSignal.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://carjbhnt844yq" 6 | path="res://.godot/imported/BTLeafSignal.svg-f98548f09cd6423647caa2b3e0b830a4.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTLeafSignal.svg" 15 | dest_files=["res://.godot/imported/BTLeafSignal.svg-f98548f09cd6423647caa2b3e0b830a4.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafTween.svg: -------------------------------------------------------------------------------- 1 | 2 | 47 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafTween.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://3pj4756qk6p" 6 | path="res://.godot/imported/BTLeafTween.svg-72f39562bcea332854ab58b3a62fb7e4.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTLeafTween.svg" 15 | dest_files=["res://.godot/imported/BTLeafTween.svg-72f39562bcea332854ab58b3a62fb7e4.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafWait.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 43 | 47 | 50 | 55 | 59 | 60 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTLeafWait.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://xi8li3jk2vs6" 6 | path="res://.godot/imported/BTLeafWait.svg-f454910626932d116ba56d8724164bd1.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTLeafWait.svg" 15 | dest_files=["res://.godot/imported/BTLeafWait.svg-f454910626932d116ba56d8724164bd1.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTRoot.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 39 | 43 | 46 | 54 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTRoot.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://xv12cpsjwtl8" 6 | path="res://.godot/imported/BTRoot.svg-eacfbd4d2762cc392094c55ff923e78c.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTRoot.svg" 15 | dest_files=["res://.godot/imported/BTRoot.svg-eacfbd4d2762cc392094c55ff923e78c.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/BTSimpleParallel.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://scoo4wxugwy7" 6 | path="res://.godot/imported/BTSimpleParallel.svg-8546d47eb70a7b37aaad191b53aafa06.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/BTSimpleParallel.svg" 15 | dest_files=["res://.godot/imported/BTSimpleParallel.svg-8546d47eb70a7b37aaad191b53aafa06.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Blackboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 44 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Blackboard.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://5e6onda232gn" 6 | path="res://.godot/imported/Blackboard.svg-99aad113ca567e93eaff49dbc3f77175.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/Blackboard.svg" 15 | dest_files=["res://.godot/imported/Blackboard.svg-99aad113ca567e93eaff49dbc3f77175.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/EditorBTRoot.svg: -------------------------------------------------------------------------------- 1 | 2 | 52 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/EditorBTRoot.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dxbd2qqx12a52" 6 | path="res://.godot/imported/EditorBTRoot.svg-6b6916705e3fa73f7ffe40a77ed65841.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/EditorBTRoot.svg" 15 | dest_files=["res://.godot/imported/EditorBTRoot.svg-6b6916705e3fa73f7ffe40a77ed65841.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/EditorFiniteStateMachine.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://vqncyulwi24v" 6 | path="res://.godot/imported/EditorFiniteStateMachine.svg-e8608d1bbb81a21982b3327f762e9126.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/EditorFiniteStateMachine.svg" 15 | dest_files=["res://.godot/imported/EditorFiniteStateMachine.svg-e8608d1bbb81a21982b3327f762e9126.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/FSMState.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 43 | 52 | 53 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/FSMState.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://boof0yioplbqr" 6 | path="res://.godot/imported/FSMState.svg-5a4ec18f1220b396d81ac0c29c407dbb.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/FSMState.svg" 15 | dest_files=["res://.godot/imported/FSMState.svg-5a4ec18f1220b396d81ac0c29c407dbb.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/FSMStateIntegration.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 43 | 52 | 53 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/FSMStateIntegration.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://gnyb25o014vd" 6 | path="res://.godot/imported/FSMStateIntegration.svg-a2b58c754cdf4634ea934415452099ad.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/FSMStateIntegration.svg" 15 | dest_files=["res://.godot/imported/FSMStateIntegration.svg-a2b58c754cdf4634ea934415452099ad.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/FSMStateIntegrationReturn.svg: -------------------------------------------------------------------------------- 1 | 2 | 56 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/FSMStateIntegrationReturn.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cjfh8x8tx20cq" 6 | path="res://.godot/imported/FSMStateIntegrationReturn.svg-3b3b086bb57c5145bc7be34e441fba59.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/FSMStateIntegrationReturn.svg" 15 | dest_files=["res://.godot/imported/FSMStateIntegrationReturn.svg-3b3b086bb57c5145bc7be34e441fba59.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/FSMTransition.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 37 | 43 | 52 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/FSMTransition.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://guy2wtwpcskx" 6 | path="res://.godot/imported/FSMTransition.svg-03add443dbedecc72086260f8244e911.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/FSMTransition.svg" 15 | dest_files=["res://.godot/imported/FSMTransition.svg-03add443dbedecc72086260f8244e911.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/FiniteStateMachine.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://1qeduaxet8mw" 6 | path="res://.godot/imported/FiniteStateMachine.svg-e73522dd5cc41a5534bd00f4347b88cf.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/FiniteStateMachine.svg" 15 | dest_files=["res://.godot/imported/FiniteStateMachine.svg-e73522dd5cc41a5534bd00f4347b88cf.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Gear.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://1e4smr7gq8kx" 6 | path="res://.godot/imported/Gear.svg-4bd0640c31f268fb47db19b3b4730128.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/Gear.svg" 15 | dest_files=["res://.godot/imported/Gear.svg-4bd0640c31f268fb47db19b3b4730128.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Help.svg: -------------------------------------------------------------------------------- 1 | 2 | 40 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Help.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dn8d4wli8uv1e" 6 | path="res://.godot/imported/Help.svg-b760ac21373bc62f0a4da09a57e2f015.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/Help.svg" 15 | dest_files=["res://.godot/imported/Help.svg-b760ac21373bc62f0a4da09a57e2f015.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/addons/behaviour_toolkit/icons/Logo.png -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Logo.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://eg2wnjvb108s" 6 | path="res://.godot/imported/Logo.png-e6b76950f4b731f658240ab9e0780450.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/behaviour_toolkit/icons/Logo.png" 14 | dest_files=["res://.godot/imported/Logo.png-e6b76950f4b731f658240ab9e0780450.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Logo.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cai87dos026yj" 6 | path="res://.godot/imported/Logo.svg-8cfecbbf805a6ab0b538dbc1ba0eccfd.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/Logo.svg" 15 | dest_files=["res://.godot/imported/Logo.svg-8cfecbbf805a6ab0b538dbc1ba0eccfd.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/MainIcon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b31gt04urv6fj" 6 | path="res://.godot/imported/MainIcon.svg-ab618d7a28ab16fc23aafd75380dc1f8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/behaviour_toolkit/icons/MainIcon.svg" 14 | dest_files=["res://.godot/imported/MainIcon.svg-ab618d7a28ab16fc23aafd75380dc1f8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Search.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/Search.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://csdaju3etjpw4" 6 | path="res://.godot/imported/Search.svg-46c789b409eba86b5d04be6ddccfe69c.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/Search.svg" 15 | dest_files=["res://.godot/imported/Search.svg-46c789b409eba86b5d04be6ddccfe69c.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/addons/behaviour_toolkit/icons/icon.png -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/icon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://qy65uqlr5s7u" 6 | path="res://.godot/imported/icon.png-941d63b5b26cc7e721388ccd274ebfe2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/behaviour_toolkit/icons/icon.png" 14 | dest_files=["res://.godot/imported/icon.png-941d63b5b26cc7e721388ccd274ebfe2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/placeholder.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 43 | 44 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/icons/placeholder.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dpfva3ksgkvkx" 6 | path="res://.godot/imported/placeholder.svg-d1f5342e31d8125f82f8e7322e2c8be9.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/behaviour_toolkit/icons/placeholder.svg" 15 | dest_files=["res://.godot/imported/placeholder.svg-d1f5342e31d8125f82f8e7322e2c8be9.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/inspector_plugin.gd: -------------------------------------------------------------------------------- 1 | extends EditorInspectorPlugin 2 | 3 | 4 | func _can_handle(object): 5 | return true 6 | 7 | 8 | func _parse_property(object, type, name, hint_type, hint_string, usage_flags, wide): 9 | # Leaf Tween 10 | if object is LeafTween: 11 | var tween_value_type: LeafTween.TweenValueType = object.tween_value_type 12 | if name == "tween_value_int": 13 | return not tween_value_type == LeafTween.TweenValueType.INT 14 | 15 | if name == "tween_value_float": 16 | return not tween_value_type == LeafTween.TweenValueType.FLOAT 17 | 18 | if name == "tween_value_vector2": 19 | return not tween_value_type == LeafTween.TweenValueType.VECTOR2 20 | 21 | if name == "tween_value_vector3": 22 | return not tween_value_type == LeafTween.TweenValueType.VECTOR3 23 | 24 | if name == "tween_value_color": 25 | return not tween_value_type == LeafTween.TweenValueType.COLOR 26 | 27 | if name == "tween_value_custom_script": 28 | return not tween_value_type == LeafTween.TweenValueType.CUSTOM_SCRIPT 29 | 30 | # Leaf Condition 31 | if object is LeafCondition: 32 | var value_type: LeafCondition.ConditionValue = object.value_type 33 | var condition_type: LeafCondition.ConditionType = object.condition_type 34 | 35 | if name == "condition_property": 36 | return condition_type == LeafCondition.ConditionType.CUSTOM_SCRIPT 37 | 38 | if name == "condition_value_string": 39 | return not value_type == LeafCondition.ConditionValue.STRING or condition_type == LeafCondition.ConditionType.CUSTOM_SCRIPT 40 | 41 | if name == "condition_value_int": 42 | return not value_type == LeafCondition.ConditionValue.INT or condition_type == LeafCondition.ConditionType.CUSTOM_SCRIPT 43 | 44 | if name == "condition_value_float": 45 | return not value_type == LeafCondition.ConditionValue.FLOAT or condition_type == LeafCondition.ConditionType.CUSTOM_SCRIPT 46 | 47 | if name == "condition_value_bool": 48 | return not value_type == LeafCondition.ConditionValue.BOOL or condition_type == LeafCondition.ConditionType.CUSTOM_SCRIPT 49 | 50 | if name == "custom_script": 51 | return not condition_type == LeafCondition.ConditionType.CUSTOM_SCRIPT 52 | 53 | if name == "value_type": 54 | return condition_type == LeafCondition.ConditionType.CUSTOM_SCRIPT 55 | 56 | return false 57 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/inspector_plugin.gd.uid: -------------------------------------------------------------------------------- 1 | uid://clmn5pxvmpu5t 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/plugin.cfg: -------------------------------------------------------------------------------- 1 | [plugin] 2 | 3 | name="BehaviourToolkit" 4 | description="This plugin provides a set of tools to create custom and complex behaviour in the Godot 4.2 Game Engine." 5 | author="Pat & Contributors" 6 | version="2.0.2" 7 | script="plugin.gd" 8 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/plugin.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorPlugin 3 | 4 | 5 | var _editor_interface = get_editor_interface() 6 | var _undo_redo = get_undo_redo() 7 | 8 | 9 | var _ui_canvas: Control 10 | var _ui_spatial: Control 11 | 12 | 13 | var _inspector_plugin = preload("res://addons/behaviour_toolkit/inspector_plugin.gd") 14 | var _toolkit_ui = preload("res://addons/behaviour_toolkit/ui/toolkit_ui.tscn") 15 | 16 | 17 | func _enter_tree(): 18 | _ui_canvas = _toolkit_ui.instantiate() 19 | _ui_spatial = _toolkit_ui.instantiate() 20 | 21 | add_control_to_container(EditorPlugin.CONTAINER_CANVAS_EDITOR_SIDE_LEFT,_ui_canvas) 22 | _ui_canvas.visible = false 23 | _ui_canvas.editor_interface = _editor_interface 24 | _ui_canvas.undo_redo = _undo_redo 25 | _ui_canvas.update_manager.start() 26 | add_control_to_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_SIDE_LEFT, _ui_spatial) 27 | _ui_spatial.visible = false 28 | _ui_spatial.editor_interface = _editor_interface 29 | _ui_spatial.undo_redo = _undo_redo 30 | _ui_spatial.update_manager.start() 31 | 32 | # Connect editor signals 33 | _editor_interface.get_selection().selection_changed.connect(_on_selection_changed) 34 | 35 | # Add inspector plugin 36 | _inspector_plugin = _inspector_plugin.new() 37 | add_inspector_plugin(_inspector_plugin) 38 | 39 | BehaviourToolkit.Logger.say("Plugin enabled.") 40 | 41 | 42 | 43 | func _exit_tree(): 44 | remove_control_from_container(EditorPlugin.CONTAINER_CANVAS_EDITOR_SIDE_LEFT,_ui_canvas) 45 | remove_control_from_container(EditorPlugin.CONTAINER_SPATIAL_EDITOR_SIDE_LEFT, _ui_spatial) 46 | 47 | _ui_canvas.queue_free() 48 | _ui_spatial.queue_free() 49 | 50 | remove_inspector_plugin(_inspector_plugin) 51 | 52 | BehaviourToolkit.Logger.say("Plugin disabled.") 53 | 54 | 55 | func _on_selection_changed() -> void: 56 | 57 | # Get current selection 58 | var selection = _editor_interface.get_selection().get_selected_nodes() 59 | 60 | if selection.size() == 0: 61 | _ui_canvas.visible = false 62 | _ui_spatial.visible = false 63 | return 64 | 65 | _ui_canvas.set_current_selection(selection[0]) 66 | _ui_spatial.set_current_selection(selection[0]) 67 | 68 | for node in selection: 69 | if node is BehaviourToolkit: 70 | _ui_canvas.visible = true 71 | _ui_spatial.visible = true 72 | return 73 | 74 | _ui_canvas.visible = false 75 | _ui_spatial.visible = false 76 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/plugin.gd.uid: -------------------------------------------------------------------------------- 1 | uid://d3in73u35c5q5 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/ui/toolkit_ui.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cj617ykhf0je8 2 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/ui/utils/update_manager.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | class_name UpdateManager extends HTTPRequest 3 | ## This class is used to check for updates of the plugin. 4 | 5 | 6 | ## Emitted when the request to the repository is completed. 7 | signal update_request_completed 8 | ## Emitted when the request to the repository is completed and an update is available. 9 | signal update_available 10 | 11 | 12 | ## If this is set to false, the plugin will not check for updates. 13 | @export var auto_start: bool = false 14 | ## The path to the addon config file. 15 | @export_file("*.cfg") var addon_config_path = "" 16 | ## The URL to the repository config file. This file has to be the raw version! 17 | @export var repo_config_url = "" 18 | 19 | ## Error flag to prevent the error message from printing twice. 20 | static var had_error: bool = false 21 | 22 | ## The current version of the plugin. 23 | var current_version: String 24 | ## The newest version of the plugin. 25 | var newest_version: String 26 | 27 | 28 | func _ready(): 29 | current_version = get_current_version() 30 | 31 | # Connect signals 32 | connect("request_completed", _on_http_request_request_completed) 33 | 34 | # Check if active 35 | if not auto_start: 36 | return 37 | 38 | start() 39 | 40 | 41 | func start(): 42 | # Get versions 43 | get_newest_version() 44 | 45 | 46 | ## Returns true if an update is available. 47 | func is_update_available() -> bool: 48 | if current_version != newest_version: 49 | return true 50 | 51 | return false 52 | 53 | 54 | ## Returns the current version of the plugin. 55 | func get_current_version() -> String: 56 | var config = ConfigFile.new() 57 | var err = config.load(addon_config_path) 58 | 59 | var result = config.get_value("plugin", "version") 60 | config.clear() 61 | 62 | return result 63 | 64 | 65 | ## Requests the newest version of the plugin from the repository. 66 | func get_newest_version() -> void: 67 | var err = request(repo_config_url) 68 | 69 | 70 | ## Called when the request to the repository is completed, parses the config file and sets the newest version. 71 | func _on_http_request_request_completed(result:int, response_code:int, headers:PackedStringArray, body:PackedByteArray): 72 | if result != OK: 73 | if not had_error: 74 | BehaviourToolkit.Logger.say( 75 | "Unable to fetch newest version from GitHub. Check your internet connection and reload the editor!", 76 | null, 77 | BehaviourToolkit.LogType.WARNING 78 | ) 79 | had_error = true 80 | 81 | emit_signal("update_request_completed") 82 | return 83 | 84 | var config = ConfigFile.new() 85 | var err = config.parse(body.get_string_from_ascii()) 86 | 87 | newest_version = config.get_value("plugin", "version") 88 | config.clear() 89 | 90 | # Emit signals 91 | emit_signal("update_request_completed") 92 | 93 | if is_update_available(): 94 | emit_signal("update_available") 95 | -------------------------------------------------------------------------------- /addons/behaviour_toolkit/ui/utils/update_manager.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ur8ahev0butf 2 | -------------------------------------------------------------------------------- /docs/screenshot-ui.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/docs/screenshot-ui.PNG -------------------------------------------------------------------------------- /docs/screenshot-ui.PNG.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://daoi7oqvibg27" 6 | path="res://.godot/imported/screenshot-ui.PNG-131a0cbd4a6217b0074938f2d17b24b8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://docs/screenshot-ui.PNG" 14 | dest_files=["res://.godot/imported/screenshot-ui.PNG-131a0cbd4a6217b0074938f2d17b24b8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /docs/thumbnail.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://caj8cq4e4spln" 6 | path="res://.godot/imported/thumbnail.svg-7fc0f5ea5444f782d367811eb3f10a24.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://docs/thumbnail.svg" 14 | dest_files=["res://.godot/imported/thumbnail.svg-7fc0f5ea5444f782d367811eb3f10a24.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0084.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b4ckaoh8istpt" 6 | path="res://.godot/imported/tile_0084.png-c2aba757074bfefa42f26a67ff91484b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0084.png" 14 | dest_files=["res://.godot/imported/tile_0084.png-c2aba757074bfefa42f26a67ff91484b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0085.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://co5fdko1b3b8o" 6 | path="res://.godot/imported/tile_0085.png-8a3a72948d57d657fc7ba153abdea45b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0085.png" 14 | dest_files=["res://.godot/imported/tile_0085.png-8a3a72948d57d657fc7ba153abdea45b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0086.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cqbgvcikw2p7w" 6 | path="res://.godot/imported/tile_0086.png-b804f8c76c99c6fc239264ebf31c8700.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0086.png" 14 | dest_files=["res://.godot/imported/tile_0086.png-b804f8c76c99c6fc239264ebf31c8700.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0087.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://3fm0oih5cpdy" 6 | path="res://.godot/imported/tile_0087.png-ee3a2d1fb0c9eddcdf8454e7ae119d73.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0087.png" 14 | dest_files=["res://.godot/imported/tile_0087.png-ee3a2d1fb0c9eddcdf8454e7ae119d73.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0088.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cwrbvx6cceop3" 6 | path="res://.godot/imported/tile_0088.png-1c627aa6e2010b936b8c2f074cb8ae7f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0088.png" 14 | dest_files=["res://.godot/imported/tile_0088.png-1c627aa6e2010b936b8c2f074cb8ae7f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0108.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://boj76womif427" 6 | path="res://.godot/imported/tile_0108.png-b8cea4ba13e473be5bbad5d1da25ef8f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0108.png" 14 | dest_files=["res://.godot/imported/tile_0108.png-b8cea4ba13e473be5bbad5d1da25ef8f.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0109.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cgp28y1g404sb" 6 | path="res://.godot/imported/tile_0109.png-c06d5f0c3e24f8b4724e0c99418b87d6.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0109.png" 14 | dest_files=["res://.godot/imported/tile_0109.png-c06d5f0c3e24f8b4724e0c99418b87d6.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0110.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bcriy5mfjd7s7" 6 | path="res://.godot/imported/tile_0110.png-6dc7197bdd4f6cdd9d810362599b15ba.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0110.png" 14 | dest_files=["res://.godot/imported/tile_0110.png-6dc7197bdd4f6cdd9d810362599b15ba.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0111.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://3f21iuub5pli" 6 | path="res://.godot/imported/tile_0111.png-29f292bec364a60ea1163f54c5a7d873.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0111.png" 14 | dest_files=["res://.godot/imported/tile_0111.png-29f292bec364a60ea1163f54c5a7d873.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0112.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cqrhvvwg1e0ro" 6 | path="res://.godot/imported/tile_0112.png-19b4b0c5bc1500236edeaba1d5f03cfc.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0112.png" 14 | dest_files=["res://.godot/imported/tile_0112.png-19b4b0c5bc1500236edeaba1d5f03cfc.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tile_0121.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ca6nw5tj5njrj" 6 | path="res://.godot/imported/tile_0121.png-69c712c02f08487624a1c9e0157788a2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tile_0121.png" 14 | dest_files=["res://.godot/imported/tile_0121.png-69c712c02f08487624a1c9e0157788a2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_barbarian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_barbarian.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_barbarian.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://q2wqt2rl0i14" 6 | path="res://.godot/imported/tiny_barbarian.png-73e83d904e63fe688d7e1e44e49966b7.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_barbarian.png" 14 | dest_files=["res://.godot/imported/tiny_barbarian.png-73e83d904e63fe688d7e1e44e49966b7.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_blacksmith.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_blacksmith.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_blacksmith.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cp4n4mks4l6t4" 6 | path="res://.godot/imported/tiny_blacksmith.png-e7b9f86c8d20f4466bcf3ae8161f3fa5.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_blacksmith.png" 14 | dest_files=["res://.godot/imported/tiny_blacksmith.png-e7b9f86c8d20f4466bcf3ae8161f3fa5.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_crab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_crab.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_crab.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cnjtcqmw1tee" 6 | path="res://.godot/imported/tiny_crab.png-6b49064b1870499d2648af193bd638a5.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_crab.png" 14 | dest_files=["res://.godot/imported/tiny_crab.png-6b49064b1870499d2648af193bd638a5.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_cyclops.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_cyclops.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_cyclops.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dd8t7dwcj5rwa" 6 | path="res://.godot/imported/tiny_cyclops.png-16204a1ebf2f035d51fe065609088dfc.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_cyclops.png" 14 | dest_files=["res://.godot/imported/tiny_cyclops.png-16204a1ebf2f035d51fe065609088dfc.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_evil wizard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_evil wizard.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_evil wizard.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://btxqb42k83r5o" 6 | path="res://.godot/imported/tiny_evil wizard.png-7c6e76502002e65385293ef73c1ab62d.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_evil wizard.png" 14 | dest_files=["res://.godot/imported/tiny_evil wizard.png-7c6e76502002e65385293ef73c1ab62d.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_ghost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_ghost.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_ghost.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bqmwkipw1o70p" 6 | path="res://.godot/imported/tiny_ghost.png-aa7c83e251ace0de2ced8fa8951d615b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_ghost.png" 14 | dest_files=["res://.godot/imported/tiny_ghost.png-aa7c83e251ace0de2ced8fa8951d615b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_goohst.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_goohst.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_goohst.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bgflndmud3o7t" 6 | path="res://.godot/imported/tiny_goohst.png-4c05259f4de4ae6fd7ce29fe28e4a72c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_goohst.png" 14 | dest_files=["res://.godot/imported/tiny_goohst.png-4c05259f4de4ae6fd7ce29fe28e4a72c.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_knight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_knight.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_knight.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dwfwhfwfmvk38" 6 | path="res://.godot/imported/tiny_knight.png-b10864dcbfe4a4a4b386772cd7c2e5cd.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_knight.png" 14 | dest_files=["res://.godot/imported/tiny_knight.png-b10864dcbfe4a4a4b386772cd7c2e5cd.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_ranger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_ranger.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_ranger.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dipfngprca32d" 6 | path="res://.godot/imported/tiny_ranger.png-8581d28a338be156b8fd04d81f5fd358.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_ranger.png" 14 | dest_files=["res://.godot/imported/tiny_ranger.png-8581d28a338be156b8fd04d81f5fd358.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_viking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_viking.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_viking.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dg2n3qhi4aopa" 6 | path="res://.godot/imported/tiny_viking.png-f5d742ea1620256eac49f1653233a3dd.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_viking.png" 14 | dest_files=["res://.godot/imported/tiny_viking.png-f5d742ea1620256eac49f1653233a3dd.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_village.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_village.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_village.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bsjt61unufjgi" 6 | path="res://.godot/imported/tiny_village.png-1d9a4d985319616f1a2c74970a6e8423.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_village.png" 14 | dest_files=["res://.godot/imported/tiny_village.png-1d9a4d985319616f1a2c74970a6e8423.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/actors/tiny_wizard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/actors/tiny_wizard.png -------------------------------------------------------------------------------- /examples/assets/actors/tiny_wizard.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cn654h0h8t5cw" 6 | path="res://.godot/imported/tiny_wizard.png-3115299f35f43f56a72ea2becfd310c8.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/actors/tiny_wizard.png" 14 | dest_files=["res://.godot/imported/tiny_wizard.png-3115299f35f43f56a72ea2becfd310c8.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/coin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/coin.png -------------------------------------------------------------------------------- /examples/assets/coin.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://co6i5qips2icn" 6 | path="res://.godot/imported/coin.png-4148480e2ce74079f4146c36b2678e66.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/coin.png" 14 | dest_files=["res://.godot/imported/coin.png-4148480e2ce74079f4146c36b2678e66.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/assets/kenney_tinytown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/BehaviourToolkit/5de713d7d8e433cfc21aacf568ff5a785e4d9db1/examples/assets/kenney_tinytown.png -------------------------------------------------------------------------------- /examples/assets/kenney_tinytown.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://duvn8ey0oylmd" 6 | path="res://.godot/imported/kenney_tinytown.png-7e27f811a422ded432a1862c222b0cb9.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://examples/assets/kenney_tinytown.png" 14 | dest_files=["res://.godot/imported/kenney_tinytown.png-7e27f811a422ded432a1862c222b0cb9.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /examples/behaviour_example/Camera.gd: -------------------------------------------------------------------------------- 1 | extends Camera2D 2 | 3 | 4 | @export var speed: float = 300.0 5 | 6 | 7 | var zoom_speed: float = 0.1 8 | 9 | 10 | func _physics_process(delta): 11 | # Move camera 12 | if Input.is_action_pressed("ui_right"): 13 | position.x += speed * delta 14 | if Input.is_action_pressed("ui_left"): 15 | position.x -= speed * delta 16 | if Input.is_action_pressed("ui_down"): 17 | position.y += speed * delta 18 | if Input.is_action_pressed("ui_up"): 19 | position.y -= speed * delta 20 | 21 | 22 | func _input(event): 23 | if event is InputEventMouseButton: 24 | if event.is_pressed(): 25 | # Zoom in 26 | if event.button_index == MOUSE_BUTTON_WHEEL_UP: 27 | zoom += Vector2.ONE * zoom_speed 28 | 29 | # Zoom out 30 | if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: 31 | # Clamp zoom to avoid negative values 32 | var new_zoom = zoom - Vector2.ONE * zoom_speed 33 | if new_zoom.x > 0 and new_zoom.y > 0: 34 | zoom = new_zoom 35 | -------------------------------------------------------------------------------- /examples/behaviour_example/Camera.gd.uid: -------------------------------------------------------------------------------- 1 | uid://hr2laxeenvtx 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/IsAlive.gd: -------------------------------------------------------------------------------- 1 | extends BTLeaf 2 | 3 | 4 | func tick(_delta: float, actor: Node, _blackboard: Blackboard) -> BTStatus: 5 | if actor.alive: 6 | return BTStatus.SUCCESS 7 | 8 | return BTStatus.FAILURE 9 | 10 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/IsAlive.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dpe5ls8m10ful 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/IsHydrated.gd: -------------------------------------------------------------------------------- 1 | extends BTLeaf 2 | 3 | 4 | func tick(_delta: float, actor: Node, _blackboard: Blackboard) -> BTStatus: 5 | if actor.thirst == 0: 6 | return BTStatus.FAILURE 7 | 8 | return BTStatus.SUCCESS 9 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/IsHydrated.gd.uid: -------------------------------------------------------------------------------- 1 | uid://btsxuyrmc3p5w 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/RandomPOI.gd: -------------------------------------------------------------------------------- 1 | extends BTLeaf 2 | 3 | 4 | var last_target_position = Vector2.ZERO 5 | 6 | 7 | func tick(_delta: float, actor: Node, blackboard: Blackboard) -> BTStatus: 8 | if actor.navigation_agent.is_navigation_finished() and actor.navigation_agent.target_position != last_target_position: 9 | last_target_position = actor.navigation_agent.target_position 10 | return BTStatus.SUCCESS 11 | 12 | if actor.navigation_agent.target_position != last_target_position: 13 | return BTStatus.RUNNING 14 | 15 | # Get random location 16 | var locations = blackboard.get_value("locations") 17 | randomize() 18 | var location = locations[randi() % locations.size()] 19 | 20 | actor.move_to(location.position) 21 | return BTStatus.RUNNING 22 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/RandomPOI.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bx7ve1crfn4qg 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/UseBottle.gd: -------------------------------------------------------------------------------- 1 | extends BTLeaf 2 | 3 | 4 | @export var bottle_volume: int = 10 5 | 6 | 7 | func tick(_delta: float, actor: Node, _blackboard: Blackboard) -> BTStatus: 8 | actor.state_machine.fire_event("start_refreshing") 9 | actor.thirst += bottle_volume 10 | return BTStatus.SUCCESS 11 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/UseBottle.gd.uid: -------------------------------------------------------------------------------- 1 | uid://hanutoq0yi7y 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/WalkToWell.gd: -------------------------------------------------------------------------------- 1 | extends BTLeaf 2 | 3 | 4 | var last_target_position = Vector2.ZERO 5 | 6 | 7 | func tick(_delta: float, actor: Node, blackboard: Blackboard) -> BTStatus: 8 | if actor.navigation_agent.is_navigation_finished() and actor.navigation_agent.target_position != last_target_position: 9 | last_target_position = actor.navigation_agent.target_position 10 | return BTStatus.SUCCESS 11 | 12 | if actor.thirst > 0: 13 | actor.state_machine.fire_event("start_refreshing") 14 | return BTStatus.SUCCESS 15 | 16 | if actor.navigation_agent.target_position != last_target_position: 17 | return BTStatus.RUNNING 18 | 19 | # Get random location 20 | var well = blackboard.get_value("well_area") 21 | actor.move_to(well.position) 22 | return BTStatus.RUNNING 23 | 24 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/leaves/WalkToWell.gd.uid: -------------------------------------------------------------------------------- 1 | uid://buu101vspblw1 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_ghost.gd: -------------------------------------------------------------------------------- 1 | extends FSMState 2 | 3 | 4 | ## Executes after the state is entered. 5 | func _on_enter(_actor: Node, _blackboard: Blackboard): 6 | pass 7 | 8 | 9 | ## Executes every _process call, if the state is active. 10 | func _on_update(_delta: float, _actor: Node, _blackboard: Blackboard): 11 | pass 12 | 13 | 14 | ## Executes before the state is exited. 15 | func _on_exit(_actor: Node, _blackboard: Blackboard): 16 | pass 17 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_ghost.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bldpd2rt2gfc5 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_idle.gd: -------------------------------------------------------------------------------- 1 | extends FSMState 2 | 3 | 4 | ## Executes after the state is entered. 5 | func _on_enter(actor: Node, _blackboard: Blackboard): 6 | actor.animation_player.play("RESET") 7 | actor.animation_player.play("idle") 8 | 9 | 10 | ## Executes every _process call, if the state is active. 11 | func _on_update(_delta: float, _actor: Node, _blackboard: Blackboard): 12 | pass 13 | 14 | 15 | ## Executes before the state is exited. 16 | func _on_exit(_actor: Node, _blackboard: Blackboard): 17 | pass 18 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_idle.gd.uid: -------------------------------------------------------------------------------- 1 | uid://ctmw8rr41u1ux 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_refreshing.gd: -------------------------------------------------------------------------------- 1 | extends FSMState 2 | 3 | 4 | ## Executes after the state is entered. 5 | func _on_enter(actor: Node, _blackboard: Blackboard): 6 | actor.animation_player.play("RESET") 7 | actor.animation_player.play("refreshing") 8 | 9 | 10 | ## Executes every _process call, if the state is active. 11 | func _on_update(_delta: float, _actor: Node, _blackboard: Blackboard): 12 | pass 13 | 14 | 15 | ## Executes before the state is exited. 16 | func _on_exit(_actor: Node, _blackboard: Blackboard): 17 | pass 18 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_refreshing.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dis45amsi0qtr 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_transformt.gd: -------------------------------------------------------------------------------- 1 | extends FSMState 2 | 3 | 4 | ## Executes after the state is entered. 5 | func _on_enter(actor: Node, _blackboard: Blackboard): 6 | # Make Transparent 7 | actor.set_modulate(Color(1, 1, 1, 0.5)) 8 | actor.ghost_state_machine.fire_event("fully_transformed") 9 | 10 | 11 | ## Executes every _process call, if the state is active. 12 | func _on_update(_delta: float, _actor: Node, _blackboard: Blackboard): 13 | pass 14 | 15 | 16 | ## Executes before the state is exited. 17 | func _on_exit(_actor: Node, _blackboard: Blackboard): 18 | pass 19 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_transformt.gd.uid: -------------------------------------------------------------------------------- 1 | uid://blw6kn4vmnakh 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_walking.gd: -------------------------------------------------------------------------------- 1 | extends FSMState 2 | 3 | 4 | ## Executes after the state is entered. 5 | func _on_enter(actor: Node, _blackboard: Blackboard): 6 | actor.animation_player.play("RESET") 7 | actor.animation_player.play("walking") 8 | 9 | 10 | ## Executes every _process call, if the state is active. 11 | func _on_update(_delta: float, _actor: Node, _blackboard: Blackboard): 12 | pass 13 | 14 | 15 | ## Executes before the state is exited. 16 | func _on_exit(_actor: Node, _blackboard: Blackboard): 17 | pass 18 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/state_walking.gd.uid: -------------------------------------------------------------------------------- 1 | uid://byn1oj8q82dky 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/trans_on_revive.gd: -------------------------------------------------------------------------------- 1 | extends FSMTransition 2 | 3 | ## Executed when the transition is taken. 4 | func _on_transition(_delta: float, actor: Node, _blackboard: Blackboard): 5 | actor.alive = true 6 | actor.age = 1 7 | actor.set_modulate(Color(1, 1, 1, 1)) 8 | 9 | 10 | ## Evaluates true, if the transition conditions are met. 11 | func is_valid(_actor: Node, _blackboard: Blackboard): 12 | return false 13 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/trans_on_revive.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bjym64dlc4hhy 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/trans_on_start_walking.gd: -------------------------------------------------------------------------------- 1 | extends FSMTransition 2 | 3 | ## Executed when the transition is taken. 4 | func _on_transition(_delta: float, _actor: Node, _blackboard: Blackboard): 5 | pass 6 | 7 | 8 | ## Evaluates true, if the transition conditions are met. 9 | func is_valid(_actor: Node, _blackboard: Blackboard): 10 | return false 11 | 12 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/trans_on_start_walking.gd.uid: -------------------------------------------------------------------------------- 1 | uid://p5w6telrj0j7 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/trans_on_stop_walking.gd: -------------------------------------------------------------------------------- 1 | extends FSMTransition 2 | 3 | ## Executed when the transition is taken. 4 | func _on_transition(_delta: float, _actor: Node, _blackboard: Blackboard): 5 | pass 6 | 7 | 8 | ## Evaluates true, if the transition conditions are met. 9 | func is_valid(_actor: Node, _blackboard: Blackboard): 10 | return false 11 | 12 | -------------------------------------------------------------------------------- /examples/behaviour_example/NPCs/states/trans_on_stop_walking.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dqowalrfhfy6u 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/actor/actor.gd: -------------------------------------------------------------------------------- 1 | extends CharacterBody2D 2 | 3 | 4 | @export var age: int = 1 5 | @export var death_age: int = 100 6 | @export var movement_speed: float = 200 7 | @export_range(0, 100) var thirst: int = 100 8 | @export var alive: bool = true 9 | 10 | @export_category("Utility") 11 | @export var navigation_agent: NavigationAgent2D 12 | @export var animation_player: AnimationPlayer 13 | @export_category("BehaviourToolkit") 14 | @export var state_machine: FiniteStateMachine 15 | @export var behaviour_tree: BTRoot 16 | @export var ghost_state_machine: FiniteStateMachine 17 | 18 | 19 | func _ready(): 20 | navigation_agent.connect("velocity_computed", _on_velocity_computed) 21 | 22 | 23 | func move_to(target: Vector2) -> void: 24 | state_machine.fire_event("start_walking") 25 | navigation_agent.target_position = target 26 | 27 | 28 | func _physics_process(_delta): 29 | if navigation_agent.is_navigation_finished(): 30 | state_machine.fire_event("stop_walking") 31 | return 32 | 33 | var next_position = navigation_agent.get_next_path_position() 34 | 35 | var new_velocity: Vector2 = (next_position - position).normalized() * movement_speed 36 | 37 | navigation_agent.set_velocity(new_velocity) 38 | 39 | 40 | func _on_velocity_computed(safe_velocity: Vector2): 41 | velocity = safe_velocity 42 | move_and_slide() 43 | 44 | 45 | func _on_player_tick_timeout(): 46 | if thirst > 0: 47 | thirst -= 1 48 | 49 | age += 1 50 | 51 | if age >= death_age: 52 | alive = false 53 | 54 | 55 | func _on_input_event(_viewport:Node, _event:InputEvent, _shape_idx:int): 56 | ghost_state_machine.fire_event("revive") 57 | -------------------------------------------------------------------------------- /examples/behaviour_example/actor/actor.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dkj3sb4f3yxpp 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/behaviour_example.gd: -------------------------------------------------------------------------------- 1 | extends Node2D 2 | 3 | 4 | @export var global_blackboard: Blackboard 5 | 6 | 7 | func _ready(): 8 | # Fill the global blackboard with the locations 9 | global_blackboard.set_value("locations", $Locations.get_children()) 10 | global_blackboard.set_value("well_area", $WellArea) 11 | 12 | 13 | func _on_well_area_body_entered(body:Node2D): 14 | if body is TileMap: 15 | return 16 | 17 | body.thirst += 10 18 | -------------------------------------------------------------------------------- /examples/behaviour_example/behaviour_example.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c51orvxej8uxv 2 | -------------------------------------------------------------------------------- /examples/behaviour_example/global_blackboard.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="Blackboard" load_steps=2 format=3 uid="uid://c60ird40hkxeb"] 2 | 3 | [ext_resource type="Script" path="res://addons/behaviour_toolkit/blackboard.gd" id="1_5dskv"] 4 | 5 | [resource] 6 | script = ExtResource("1_5dskv") 7 | content = {} 8 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/MrBlacksmith.gd: -------------------------------------------------------------------------------- 1 | extends CharacterBody2D 2 | 3 | 4 | const SPEED := 100.0 5 | const SPRINT_MULTIPLIER := 1.7 6 | 7 | 8 | var movement_direction := Vector2.ZERO 9 | 10 | 11 | @onready var state_machine := $FSMController 12 | @onready var sprite := $Sprite2D 13 | @onready var animation_player := $AnimationPlayer 14 | @onready var particles_walking := $ParticlesWalking 15 | 16 | 17 | func _physics_process(_delta): 18 | movement_direction = Vector2( 19 | Input.get_axis("ui_left", "ui_right"), 20 | Input.get_axis("ui_up", "ui_down") 21 | ) 22 | 23 | 24 | func _ready(): 25 | state_machine.start() -------------------------------------------------------------------------------- /examples/fsm_character_controller/MrBlacksmith.gd.uid: -------------------------------------------------------------------------------- 1 | uid://d4g4u8q8b7rsx 2 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/crab.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=8 format=3 uid="uid://ds1mew31yiyj"] 2 | 3 | [ext_resource type="Texture2D" uid="uid://cnjtcqmw1tee" path="res://examples/assets/actors/tiny_crab.png" id="1_5suvw"] 4 | [ext_resource type="Script" uid="uid://d11c6gwrjou0w" path="res://addons/behaviour_toolkit/behaviour_tree/bt_root.gd" id="2_eevb3"] 5 | [ext_resource type="Script" uid="uid://c6si2venemcbd" path="res://addons/behaviour_toolkit/behaviour_tree/composites/bt_random.gd" id="3_dv664"] 6 | [ext_resource type="Script" uid="uid://dpr2xa1e5hy8u" path="res://addons/behaviour_toolkit/behaviour_tree/composites/bt_sequence.gd" id="4_iyxnv"] 7 | [ext_resource type="Script" uid="uid://ba52jr7ryaq75" path="res://addons/behaviour_toolkit/behaviour_tree/leaves/leaf_tween.gd" id="5_i3fqj"] 8 | [ext_resource type="Script" uid="uid://buvb8uppbyosm" path="res://addons/behaviour_toolkit/behaviour_tree/leaves/leaf_wait.gd" id="6_q85ek"] 9 | 10 | [sub_resource type="CircleShape2D" id="CircleShape2D_26ahs"] 11 | radius = 8.0 12 | 13 | [node name="Crab" type="CharacterBody2D"] 14 | texture_filter = 1 15 | 16 | [node name="Sprite2D" type="Sprite2D" parent="."] 17 | texture = ExtResource("1_5suvw") 18 | 19 | [node name="CollisionShape2D" type="CollisionShape2D" parent="."] 20 | shape = SubResource("CircleShape2D_26ahs") 21 | 22 | [node name="BTRoot" type="Node" parent="." node_paths=PackedStringArray("actor")] 23 | script = ExtResource("2_eevb3") 24 | autostart = true 25 | actor = NodePath("..") 26 | verbose = true 27 | 28 | [node name="ChangeColor" type="Node" parent="BTRoot"] 29 | script = ExtResource("4_iyxnv") 30 | 31 | [node name="RandomColor" type="Node" parent="BTRoot/ChangeColor"] 32 | script = ExtResource("3_dv664") 33 | 34 | [node name="Green" type="Node" parent="BTRoot/ChangeColor/RandomColor"] 35 | script = ExtResource("5_i3fqj") 36 | tween_property = "modulate" 37 | tween_value_type = 4 38 | tween_value_color = Color(0, 0.94902, 0, 1) 39 | 40 | [node name="Yellow" type="Node" parent="BTRoot/ChangeColor/RandomColor"] 41 | script = ExtResource("5_i3fqj") 42 | tween_property = "modulate" 43 | tween_value_type = 4 44 | tween_value_color = Color(0.937255, 0.819608, 0.219608, 1) 45 | 46 | [node name="Blue" type="Node" parent="BTRoot/ChangeColor/RandomColor"] 47 | script = ExtResource("5_i3fqj") 48 | tween_property = "modulate" 49 | tween_value_type = 4 50 | tween_value_color = Color(0.239216, 0.568627, 1, 1) 51 | 52 | [node name="Wait" type="Node" parent="BTRoot/ChangeColor"] 53 | script = ExtResource("6_q85ek") 54 | 55 | [node name="ResetColor" type="Node" parent="BTRoot/ChangeColor"] 56 | script = ExtResource("5_i3fqj") 57 | tween_property = "modulate" 58 | tween_value_type = 4 59 | tween_value_color = Color(1, 1, 1, 1) 60 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/states/IDLE.gd: -------------------------------------------------------------------------------- 1 | extends FSMState 2 | 3 | 4 | # Executes after the state is entered. 5 | func _on_enter(actor, _blackboard: Blackboard): 6 | # Cast actor 7 | actor = actor as CharacterBody2D 8 | 9 | actor.animation_player.play("idle") 10 | 11 | 12 | # Executes every _process call, if the state is active. 13 | func _on_update(_delta, _actor, _blackboard: Blackboard): 14 | pass 15 | 16 | 17 | # Executes before the state is exited. 18 | func _on_exit(_actor, _blackboard: Blackboard): 19 | pass 20 | 21 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/states/IDLE.gd.uid: -------------------------------------------------------------------------------- 1 | uid://b8cyip4l40jgx 2 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/states/MOVING.gd: -------------------------------------------------------------------------------- 1 | extends FSMState 2 | 3 | 4 | # Executes after the state is entered. 5 | func _on_enter(actor: Node, _blackboard: Blackboard) -> void: 6 | # Cast actor 7 | actor = actor as CharacterBody2D 8 | 9 | actor.animation_player.play("walking") 10 | 11 | 12 | # Executes every _process call, if the state is active. 13 | func _on_update(_delta: float, actor: Node, _blackboard: Blackboard) -> void: 14 | # Cast actor 15 | actor = actor as CharacterBody2D 16 | 17 | actor.velocity = actor.movement_direction * actor.SPEED 18 | 19 | # Flip the sprite if the actor is moving right. 20 | if actor.velocity.x < 0: 21 | actor.sprite.flip_h = true 22 | else: 23 | actor.sprite.flip_h = false 24 | 25 | actor.move_and_slide() 26 | 27 | 28 | # Executes before the state is exited. 29 | func _on_exit(_actor: Node, _blackboard: Blackboard) -> void: 30 | pass 31 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/states/MOVING.gd.uid: -------------------------------------------------------------------------------- 1 | uid://cvjqfgfhu2yue 2 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/states/SPRINTING.gd: -------------------------------------------------------------------------------- 1 | extends FSMState 2 | 3 | 4 | # Executes after the state is entered. 5 | func _on_enter(actor, _blackboard: Blackboard): 6 | # Cast actor 7 | actor = actor as CharacterBody2D 8 | 9 | actor.particles_walking.emitting = true 10 | 11 | 12 | # Executes every _process call, if the state is active. 13 | func _on_update(_delta: float, actor: Node, _blackboard: Blackboard) -> void: 14 | # Cast actor 15 | actor = actor as CharacterBody2D 16 | 17 | actor.velocity = actor.movement_direction * actor.SPEED * actor.SPRINT_MULTIPLIER 18 | 19 | # Flip the sprite if the actor is moving right. 20 | if actor.velocity.x < 0: 21 | actor.sprite.flip_h = true 22 | else: 23 | actor.sprite.flip_h = false 24 | 25 | actor.move_and_slide() 26 | 27 | 28 | # Executes before the state is exited. 29 | func _on_exit(actor, _blackboard: Blackboard): 30 | # Cast actor 31 | actor = actor as CharacterBody2D 32 | 33 | actor.particles_walking.emitting = false 34 | 35 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/states/SPRINTING.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c2yda53e16fwn 2 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/transitions/onStartMoving.gd: -------------------------------------------------------------------------------- 1 | extends FSMTransition 2 | 3 | # Executed when the transition is taken. 4 | func _on_transition(_delta, _actor, _blackboard: Blackboard): 5 | pass 6 | 7 | 8 | # Evaluates true, if the transition conditions are met. 9 | func is_valid(actor, _blackboard: Blackboard): 10 | # Cast actor 11 | actor = actor as CharacterBody2D 12 | 13 | if actor.movement_direction != Vector2.ZERO: 14 | return true 15 | return false 16 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/transitions/onStartMoving.gd.uid: -------------------------------------------------------------------------------- 1 | uid://clqh1515due6x 2 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/transitions/onStartSprinting.gd: -------------------------------------------------------------------------------- 1 | extends FSMTransition 2 | 3 | # Executed when the transition is taken. 4 | func _on_transition(_delta, _actor, _blackboard: Blackboard): 5 | pass 6 | 7 | 8 | # Evaluates true, if the transition conditions are met. 9 | func is_valid(_actor, _blackboard: Blackboard): 10 | if Input.is_action_pressed("action_sprint"): 11 | return true 12 | else: 13 | return false 14 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/transitions/onStartSprinting.gd.uid: -------------------------------------------------------------------------------- 1 | uid://db4n8gh1ye50c 2 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/transitions/onStopMoving.gd: -------------------------------------------------------------------------------- 1 | extends FSMTransition 2 | 3 | # Executed when the transition is taken. 4 | func _on_transition(_delta, _actor, _blackboard: Blackboard): 5 | pass 6 | 7 | 8 | # Evaluates true, if the transition conditions are met. 9 | func is_valid(actor, _blackboard: Blackboard): 10 | # Cast actor 11 | actor = actor as CharacterBody2D 12 | 13 | if actor.movement_direction == Vector2.ZERO: 14 | return true 15 | return false 16 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/transitions/onStopMoving.gd.uid: -------------------------------------------------------------------------------- 1 | uid://djobir3d8k83r 2 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/transitions/onStopSprinting.gd: -------------------------------------------------------------------------------- 1 | extends FSMTransition 2 | 3 | # Executed when the transition is taken. 4 | func _on_transition(_delta, _actor, _blackboard: Blackboard): 5 | pass 6 | 7 | 8 | # Evaluates true, if the transition conditions are met. 9 | func is_valid(_actor, _blackboard: Blackboard): 10 | if not Input.is_action_pressed("action_sprint"): 11 | return true 12 | else: 13 | return false 14 | -------------------------------------------------------------------------------- /examples/fsm_character_controller/transitions/onStopSprinting.gd.uid: -------------------------------------------------------------------------------- 1 | uid://beyib2ryg4dja 2 | -------------------------------------------------------------------------------- /icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bbilmsl1ghy3k" 6 | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /script_templates/BTComposite/new_composite.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends BTComposite 3 | 4 | 5 | # Gets called every tick of the behavior tree 6 | # `leaves` is an array of the children of this node set @onready 7 | func tick(_delta: float, _actor: Node, _blackboard: Blackboard) -> BTStatus: 8 | # Logic for ticking one or more leaves 9 | # Return BTStatus depending on the result of the leaves 10 | # Return BTStatus.RUNNING, if there are still leaves to tick 11 | return BTStatus.SUCCESS 12 | 13 | 14 | # Add custom configuration warnings 15 | # Note: Can be deleted if you don't want to define your own warnings. 16 | func _get_configuration_warnings() -> PackedStringArray: 17 | var warnings: Array = [] 18 | 19 | warnings.append_array(super._get_configuration_warnings()) 20 | 21 | # Add your own warnings to the array here 22 | 23 | return warnings 24 | -------------------------------------------------------------------------------- /script_templates/BTComposite/new_composite.gd.uid: -------------------------------------------------------------------------------- 1 | uid://dnrjf0xxb5ym5 2 | -------------------------------------------------------------------------------- /script_templates/BTDecorator/new_decorator.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends BTDecorator 3 | 4 | 5 | # Gets called every tick of the behavior tree 6 | # `leaf` is the child of this decorator and is automatically set @onready 7 | func tick(_delta: float, _actor: Node, _blackboard: Blackboard) -> BTStatus: 8 | var response = leaf.tick(_delta, _actor, _blackboard) 9 | 10 | # Augment the response of the leaf 11 | 12 | return response 13 | 14 | 15 | # Add custom configuration warnings 16 | # Note: Can be deleted if you don't want to define your own warnings. 17 | func _get_configuration_warnings() -> PackedStringArray: 18 | var warnings: Array = [] 19 | 20 | warnings.append_array(super._get_configuration_warnings()) 21 | 22 | # Add your own warnings to the array here 23 | 24 | return warnings 25 | -------------------------------------------------------------------------------- /script_templates/BTDecorator/new_decorator.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c0l3av16aw2i1 2 | -------------------------------------------------------------------------------- /script_templates/BTLeaf/new_leaf.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends BTLeaf 3 | 4 | 5 | # Gets called every tick of the behavior tree 6 | func tick(_delta: float, _actor: Node, _blackboard: Blackboard) -> BTStatus: 7 | # Handle leaf logic 8 | # Return SUCCESS, FAILURE, or RUNNING 9 | return BTStatus.SUCCESS 10 | 11 | 12 | # Add custom configuration warnings 13 | # Note: Can be deleted if you don't want to define your own warnings. 14 | func _get_configuration_warnings() -> PackedStringArray: 15 | var warnings: Array = [] 16 | 17 | warnings.append_array(super._get_configuration_warnings()) 18 | 19 | # Add your own warnings to the array here 20 | 21 | return warnings 22 | -------------------------------------------------------------------------------- /script_templates/BTLeaf/new_leaf.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c7triwqk7njkv 2 | -------------------------------------------------------------------------------- /script_templates/FSMState/new_state.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends FSMState 3 | 4 | 5 | # Executes after the state is entered. 6 | func _on_enter(_actor: Node, _blackboard: Blackboard) -> void: 7 | pass 8 | 9 | 10 | # Executes every _process call, if the state is active. 11 | func _on_update(_delta: float, _actor: Node, _blackboard: Blackboard) -> void: 12 | pass 13 | 14 | 15 | # Executes before the state is exited. 16 | func _on_exit(_actor: Node, _blackboard: Blackboard) -> void: 17 | pass 18 | 19 | 20 | # Add custom configuration warnings 21 | # Note: Can be deleted if you don't want to define your own warnings. 22 | func _get_configuration_warnings() -> PackedStringArray: 23 | var warnings: Array = [] 24 | 25 | warnings.append_array(super._get_configuration_warnings()) 26 | 27 | # Add your own warnings to the array here 28 | 29 | return warnings 30 | -------------------------------------------------------------------------------- /script_templates/FSMState/new_state.gd.uid: -------------------------------------------------------------------------------- 1 | uid://r5h0488o4gl4 2 | -------------------------------------------------------------------------------- /script_templates/FSMTransition/new_transition.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends FSMTransition 3 | 4 | 5 | # Executed when the transition is taken. 6 | func _on_transition(_delta: float, _actor: Node, _blackboard: Blackboard) -> void: 7 | pass 8 | 9 | 10 | # Evaluates true, if the transition conditions are met. 11 | func is_valid(_actor: Node, _blackboard: Blackboard) -> bool: 12 | return false 13 | 14 | 15 | # Add custom configuration warnings 16 | # Note: Can be deleted if you don't want to define your own warnings. 17 | func _get_configuration_warnings() -> PackedStringArray: 18 | var warnings: Array = [] 19 | 20 | warnings.append_array(super._get_configuration_warnings()) 21 | 22 | # Add your own warnings to the array here 23 | 24 | return warnings 25 | -------------------------------------------------------------------------------- /script_templates/FSMTransition/new_transition.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bhpluegiu8ysu 2 | --------------------------------------------------------------------------------