From c46d0e27e462183e3d1eefd977f71344e67c3ccd Mon Sep 17 00:00:00 2001 From: Tony Bark Date: Tue, 14 Mar 2023 06:30:58 -0400 Subject: [PATCH] Removed state machine for behavior trees - Added Font Awesome Support --- LICENSE.md | 201 ++ addons/SpritesheetGenerator/Checker.png | Bin 0 -> 913 bytes .../Checker.png.import} | 8 +- .../SpriteSheetGenerator.gd | 13 + .../SpritesheetFrame.tscn | 77 + .../SpritesheetGenerator.tscn | 714 ++++++ addons/SpritesheetGenerator/plugin.cfg | 7 + addons/fontawesome/All.gd | 2029 +++++++++++++++++ addons/fontawesome/FontAwesome.gd | 44 + .../LICENSE.md => fontawesome/LICENSE.txt} | 2 +- addons/fontawesome/flag-solid.svg | 1 + addons/fontawesome/flag-solid.svg.import | 37 + addons/fontawesome/fonts/LICENSE.txt | 165 ++ addons/fontawesome/fonts/fa-brands-400.woff2 | Bin 0 -> 108000 bytes .../fonts/fa-brands-400.woff2.import | 33 + addons/fontawesome/fonts/fa-regular-400.woff2 | Bin 0 -> 24840 bytes .../fonts/fa-regular-400.woff2.import | 33 + addons/fontawesome/fonts/fa-solid-900.woff2 | Bin 0 -> 149908 bytes .../fonts/fa-solid-900.woff2.import | 33 + addons/fontawesome/plugin.cfg | 6 + addons/fontawesome/plugin.gd | 8 + .../simple-state/classes/animation_state.gd | 47 - addons/simple-state/classes/debugger.gd | 139 -- addons/simple-state/classes/random_state.gd | 34 - addons/simple-state/classes/sequence_state.gd | 43 - addons/simple-state/classes/state.gd | 291 --- addons/simple-state/demo/demo.gd | 14 - addons/simple-state/demo/demo.tscn | 218 -- addons/simple-state/demo/description_box.gd | 98 - addons/simple-state/demo/emit_next.gd | 6 - addons/simple-state/icons/animation_state.png | Bin 2901 -> 0 bytes .../icons/licenses/Visit Kenney.url | 2 - .../icons/licenses/Visit Patreon.url | 2 - .../icons/licenses/board_game_icons.txt | 22 - .../icons/licenses/game_icons+expansion.txt | 14 - .../icons/licenses/pictogrammers.txt | 20 - addons/simple-state/icons/random_state.png | Bin 551 -> 0 bytes addons/simple-state/icons/sequence_state.png | Bin 424 -> 0 bytes addons/simple-state/icons/sources.txt | 12 - addons/simple-state/icons/state.png | Bin 572 -> 0 bytes addons/simple-state/icons/state_fullsize.png | Bin 767 -> 0 bytes .../icons/state_machine_debugger.png | Bin 1093 -> 0 bytes .../icons/state_machine_debugger.png.import | 34 - addons/simple-state/plugin.cfg | 7 - addons/simple-state/plugin.gd | 25 - .../templates/State/empty_state.gd | 33 - addons/yet_another_behavior_tree/LICENSE.md | 201 ++ addons/yet_another_behavior_tree/plugin.cfg | 7 + .../src/Assets/Icons/Icons.pdn | Bin 0 -> 11229 bytes .../src/Assets/Icons/btaction.png | Bin 0 -> 286 bytes .../src/Assets/Icons/btaction.png.import} | 8 +- .../Assets/Icons/btactionblackboarddelete.png | Bin 0 -> 271 bytes .../Icons/btactionblackboarddelete.png.import | 34 + .../Assets/Icons/btactionblackboardset.png | Bin 0 -> 299 bytes .../Icons/btactionblackboardset.png.import | 34 + .../src/Assets/Icons/btactioncallable.png | Bin 0 -> 317 bytes .../Assets/Icons/btactioncallable.png.import | 34 + .../src/Assets/Icons/btactionwait.png | Bin 0 -> 358 bytes .../src/Assets/Icons/btactionwait.png.import | 34 + .../src/Assets/Icons/btblackboard.png | Bin 0 -> 197 bytes .../src/Assets/Icons/btblackboard.png.import | 34 + .../src/Assets/Icons/btcomposite.png | Bin 0 -> 145 bytes .../src/Assets/Icons/btcomposite.png.import | 34 + .../src/Assets/Icons/btcondition.png | Bin 0 -> 258 bytes .../src/Assets/Icons/btcondition.png.import | 34 + .../Icons/btconditionblackboardkeyexists.png | Bin 0 -> 299 bytes .../btconditionblackboardkeyexists.png.import | 34 + .../btconditionblackboardvaluescomparison.png | Bin 0 -> 317 bytes ...itionblackboardvaluescomparison.png.import | 34 + .../src/Assets/Icons/btconditioncallable.png | Bin 0 -> 317 bytes .../Icons/btconditioncallable.png.import | 34 + .../src/Assets/Icons/btdecorator.png | Bin 0 -> 145 bytes .../src/Assets/Icons/btdecorator.png.import | 34 + .../src/Assets/Icons/btfailure.png | Bin 0 -> 246 bytes .../src/Assets/Icons/btfailure.png.import | 34 + .../src/Assets/Icons/btinverter.png | Bin 0 -> 501 bytes .../src/Assets/Icons/btinverter.png.import | 34 + .../src/Assets/Icons/btleaf.png | Bin 0 -> 235 bytes .../src/Assets/Icons/btleaf.png.import} | 8 +- .../src/Assets/Icons/btlimiter.png | Bin 0 -> 159 bytes .../src/Assets/Icons/btlimiter.png.import | 34 + .../src/Assets/Icons/btnode.png | Bin 0 -> 145 bytes .../src/Assets/Icons/btnode.png.import} | 8 +- .../src/Assets/Icons/btparallel.png | Bin 0 -> 205 bytes .../src/Assets/Icons/btparallel.png.import | 34 + .../src/Assets/Icons/btrandom.png | Bin 0 -> 218 bytes .../src/Assets/Icons/btrandom.png.import | 34 + .../src/Assets/Icons/btrandomselector.png | Bin 0 -> 190 bytes .../Assets/Icons/btrandomselector.png.import | 34 + .../src/Assets/Icons/btrepeatuntil.png | Bin 0 -> 367 bytes .../src/Assets/Icons/btrepeatuntil.png.import | 34 + .../src/Assets/Icons/btroot.png | Bin 0 -> 213 bytes .../src/Assets/Icons/btroot.png.import} | 8 +- .../src/Assets/Icons/btselector.png | Bin 0 -> 181 bytes .../src/Assets/Icons/btselector.png.import | 34 + .../src/Assets/Icons/btsequence.png | Bin 0 -> 248 bytes .../src/Assets/Icons/btsequence.png.import | 34 + .../src/Assets/Icons/btsuccess.png | Bin 0 -> 314 bytes .../src/Assets/Icons/btsuccess.png.import | 34 + .../src/Blackboard/BTBlackboard.gd | 89 + .../src/Nodes/BTNode.gd | 126 + .../src/Nodes/BTRoot.gd | 196 ++ .../src/Nodes/Composite/BTComposite.gd | 59 + .../src/Nodes/Composite/BTParallel.gd | 58 + .../src/Nodes/Composite/BTRandomSelector.gd | 42 + .../src/Nodes/Composite/BTSelector.gd | 63 + .../src/Nodes/Composite/BTSequence.gd | 63 + .../src/Nodes/Decorators/BTDecorator.gd | 58 + .../src/Nodes/Decorators/BTFailure.gd | 41 + .../src/Nodes/Decorators/BTInverter.gd | 47 + .../src/Nodes/Decorators/BTLimiter.gd | 60 + .../src/Nodes/Decorators/BTRandom.gd | 47 + .../src/Nodes/Decorators/BTRepeatUntil.gd | 67 + .../src/Nodes/Decorators/BTSuccess.gd | 41 + .../src/Nodes/Leaves/BTAction.gd | 38 + .../Nodes/Leaves/BTActionBlackboardDelete.gd | 64 + .../src/Nodes/Leaves/BTActionBlackboardSet.gd | 98 + .../src/Nodes/Leaves/BTActionCallable.gd | 123 + .../src/Nodes/Leaves/BTActionWait.gd | 62 + .../src/Nodes/Leaves/BTCondition.gd | 38 + .../Leaves/BTConditionBlackboardKeyExists.gd | 66 + .../BTConditionBlackboardValuesComparison.gd | 105 + .../src/Nodes/Leaves/BTConditionCallable.gd | 112 + .../src/Nodes/Leaves/BTLeaf.gd | 55 + .../src/Result/BTTickResult.gd | 36 + .../src/Utils/BTExpression.gd | 64 + .../yet_another_behavior_tree.gd | 12 + documentation/assets/.gdignore | 0 documentation/assets/bt_illustration.png | Bin 0 -> 28329 bytes .../assets/nodes/btactionblackboarddelete.png | Bin 0 -> 9212 bytes .../assets/nodes/btactionblackboardset.png | Bin 0 -> 16916 bytes .../assets/nodes/btactioncallable.png | Bin 0 -> 19861 bytes documentation/assets/nodes/btactionwait.png | Bin 0 -> 13013 bytes documentation/assets/nodes/btblackboard.png | Bin 0 -> 26023 bytes .../nodes/btconditionblackboardkeyexists.png | Bin 0 -> 10154 bytes .../btconditionblackboardvaluescomparison.png | Bin 0 -> 22680 bytes .../assets/nodes/btconditioncallable.png | Bin 0 -> 20767 bytes documentation/assets/nodes/btlimiter.png | Bin 0 -> 7198 bytes documentation/assets/nodes/btrandom.png | Bin 0 -> 6063 bytes .../assets/nodes/btrandomselector.png | Bin 0 -> 9837 bytes documentation/assets/nodes/btrepeatuntil.png | Bin 0 -> 11671 bytes documentation/assets/nodes/btroot.png | Bin 0 -> 24131 bytes documentation/assets/nodes/btroot.png.import | 34 + documentation/assets/nodes/btselector.png | Bin 0 -> 9821 bytes documentation/assets/nodes/btsequence.png | Bin 0 -> 9803 bytes examples/blackboard_sharing/README.MD | 12 + examples/blackboard_sharing/main.gd | 42 + examples/blackboard_sharing/main.tscn | 23 + examples/blackboard_sharing/player.gd | 63 + examples/blackboard_sharing/player.tscn | 123 + examples/simple_ai_logic/README.MD | 12 + examples/simple_ai_logic/env/tree.gd | 49 + examples/simple_ai_logic/env/tree.tscn | 27 + examples/simple_ai_logic/env/warehouse.tscn | 9 + examples/simple_ai_logic/lumberjack.gd | 102 + examples/simple_ai_logic/lumberjack.tscn | 167 ++ examples/simple_ai_logic/main.gd | 36 + examples/simple_ai_logic/main.tscn | 104 + project.godot | 2 +- script_templates/.gdignore | 0 script_templates/BTNode/default.gd | 4 + 161 files changed, 7082 insertions(+), 1083 deletions(-) create mode 100644 LICENSE.md create mode 100644 addons/SpritesheetGenerator/Checker.png rename addons/{simple-state/icons/state.png.import => SpritesheetGenerator/Checker.png.import} (67%) create mode 100644 addons/SpritesheetGenerator/SpriteSheetGenerator.gd create mode 100644 addons/SpritesheetGenerator/SpritesheetFrame.tscn create mode 100644 addons/SpritesheetGenerator/SpritesheetGenerator.tscn create mode 100644 addons/SpritesheetGenerator/plugin.cfg create mode 100644 addons/fontawesome/All.gd create mode 100644 addons/fontawesome/FontAwesome.gd rename addons/{simple-state/LICENSE.md => fontawesome/LICENSE.txt} (96%) create mode 100644 addons/fontawesome/flag-solid.svg create mode 100644 addons/fontawesome/flag-solid.svg.import create mode 100644 addons/fontawesome/fonts/LICENSE.txt create mode 100644 addons/fontawesome/fonts/fa-brands-400.woff2 create mode 100644 addons/fontawesome/fonts/fa-brands-400.woff2.import create mode 100644 addons/fontawesome/fonts/fa-regular-400.woff2 create mode 100644 addons/fontawesome/fonts/fa-regular-400.woff2.import create mode 100644 addons/fontawesome/fonts/fa-solid-900.woff2 create mode 100644 addons/fontawesome/fonts/fa-solid-900.woff2.import create mode 100644 addons/fontawesome/plugin.cfg create mode 100644 addons/fontawesome/plugin.gd delete mode 100644 addons/simple-state/classes/animation_state.gd delete mode 100644 addons/simple-state/classes/debugger.gd delete mode 100644 addons/simple-state/classes/random_state.gd delete mode 100644 addons/simple-state/classes/sequence_state.gd delete mode 100644 addons/simple-state/classes/state.gd delete mode 100644 addons/simple-state/demo/demo.gd delete mode 100644 addons/simple-state/demo/demo.tscn delete mode 100644 addons/simple-state/demo/description_box.gd delete mode 100644 addons/simple-state/demo/emit_next.gd delete mode 100644 addons/simple-state/icons/animation_state.png delete mode 100644 addons/simple-state/icons/licenses/Visit Kenney.url delete mode 100644 addons/simple-state/icons/licenses/Visit Patreon.url delete mode 100644 addons/simple-state/icons/licenses/board_game_icons.txt delete mode 100644 addons/simple-state/icons/licenses/game_icons+expansion.txt delete mode 100644 addons/simple-state/icons/licenses/pictogrammers.txt delete mode 100644 addons/simple-state/icons/random_state.png delete mode 100644 addons/simple-state/icons/sequence_state.png delete mode 100644 addons/simple-state/icons/sources.txt delete mode 100644 addons/simple-state/icons/state.png delete mode 100644 addons/simple-state/icons/state_fullsize.png delete mode 100644 addons/simple-state/icons/state_machine_debugger.png delete mode 100644 addons/simple-state/icons/state_machine_debugger.png.import delete mode 100644 addons/simple-state/plugin.cfg delete mode 100644 addons/simple-state/plugin.gd delete mode 100644 addons/simple-state/templates/State/empty_state.gd create mode 100644 addons/yet_another_behavior_tree/LICENSE.md create mode 100644 addons/yet_another_behavior_tree/plugin.cfg create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/Icons.pdn create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btaction.png rename addons/{simple-state/icons/animation_state.png.import => yet_another_behavior_tree/src/Assets/Icons/btaction.png.import} (65%) create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboarddelete.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboarddelete.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboardset.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboardset.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btactioncallable.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btactioncallable.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btactionwait.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btactionwait.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btblackboard.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btblackboard.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btcomposite.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btcomposite.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btcondition.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btcondition.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btconditionblackboardkeyexists.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btconditionblackboardkeyexists.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btconditionblackboardvaluescomparison.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btconditionblackboardvaluescomparison.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btconditioncallable.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btconditioncallable.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btdecorator.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btdecorator.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btfailure.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btfailure.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btinverter.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btinverter.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btleaf.png rename addons/{simple-state/icons/random_state.png.import => yet_another_behavior_tree/src/Assets/Icons/btleaf.png.import} (66%) create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btlimiter.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btlimiter.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btnode.png rename addons/{simple-state/icons/sequence_state.png.import => yet_another_behavior_tree/src/Assets/Icons/btnode.png.import} (66%) create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btparallel.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btparallel.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btrandom.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btrandom.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btrandomselector.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btrandomselector.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btrepeatuntil.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btrepeatuntil.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btroot.png rename addons/{simple-state/icons/state_fullsize.png.import => yet_another_behavior_tree/src/Assets/Icons/btroot.png.import} (66%) create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btselector.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btselector.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btsequence.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btsequence.png.import create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btsuccess.png create mode 100644 addons/yet_another_behavior_tree/src/Assets/Icons/btsuccess.png.import create mode 100644 addons/yet_another_behavior_tree/src/Blackboard/BTBlackboard.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/BTNode.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/BTRoot.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Composite/BTComposite.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Composite/BTParallel.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Composite/BTRandomSelector.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Composite/BTSelector.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Composite/BTSequence.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Decorators/BTDecorator.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Decorators/BTFailure.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Decorators/BTInverter.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Decorators/BTLimiter.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Decorators/BTRandom.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Decorators/BTRepeatUntil.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Decorators/BTSuccess.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTAction.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardDelete.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardSet.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionCallable.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionWait.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTCondition.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionBlackboardKeyExists.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionBlackboardValuesComparison.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionCallable.gd create mode 100644 addons/yet_another_behavior_tree/src/Nodes/Leaves/BTLeaf.gd create mode 100644 addons/yet_another_behavior_tree/src/Result/BTTickResult.gd create mode 100644 addons/yet_another_behavior_tree/src/Utils/BTExpression.gd create mode 100644 addons/yet_another_behavior_tree/yet_another_behavior_tree.gd create mode 100644 documentation/assets/.gdignore create mode 100644 documentation/assets/bt_illustration.png create mode 100644 documentation/assets/nodes/btactionblackboarddelete.png create mode 100644 documentation/assets/nodes/btactionblackboardset.png create mode 100644 documentation/assets/nodes/btactioncallable.png create mode 100644 documentation/assets/nodes/btactionwait.png create mode 100644 documentation/assets/nodes/btblackboard.png create mode 100644 documentation/assets/nodes/btconditionblackboardkeyexists.png create mode 100644 documentation/assets/nodes/btconditionblackboardvaluescomparison.png create mode 100644 documentation/assets/nodes/btconditioncallable.png create mode 100644 documentation/assets/nodes/btlimiter.png create mode 100644 documentation/assets/nodes/btrandom.png create mode 100644 documentation/assets/nodes/btrandomselector.png create mode 100644 documentation/assets/nodes/btrepeatuntil.png create mode 100644 documentation/assets/nodes/btroot.png create mode 100644 documentation/assets/nodes/btroot.png.import create mode 100644 documentation/assets/nodes/btselector.png create mode 100644 documentation/assets/nodes/btsequence.png create mode 100644 examples/blackboard_sharing/README.MD create mode 100644 examples/blackboard_sharing/main.gd create mode 100644 examples/blackboard_sharing/main.tscn create mode 100644 examples/blackboard_sharing/player.gd create mode 100644 examples/blackboard_sharing/player.tscn create mode 100644 examples/simple_ai_logic/README.MD create mode 100644 examples/simple_ai_logic/env/tree.gd create mode 100644 examples/simple_ai_logic/env/tree.tscn create mode 100644 examples/simple_ai_logic/env/warehouse.tscn create mode 100644 examples/simple_ai_logic/lumberjack.gd create mode 100644 examples/simple_ai_logic/lumberjack.tscn create mode 100644 examples/simple_ai_logic/main.gd create mode 100644 examples/simple_ai_logic/main.tscn create mode 100644 script_templates/.gdignore create mode 100644 script_templates/BTNode/default.gd diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/addons/SpritesheetGenerator/Checker.png b/addons/SpritesheetGenerator/Checker.png new file mode 100644 index 0000000000000000000000000000000000000000..f147f725c689ade6c43239efce58247395ae9c70 GIT binary patch literal 913 zcmV;C18)3@P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vtlG`8*hX3mnJp%dw#Bnf~nckqs?~6CidUw-K zyV#5)MiJtL2a(YJ>*t^!c-Y0sV)j&03V5tok&2Fo_h*0D62h2$!^;mJKckpFd~x;| z?Ui3(6;|Jz&-rvF(#wGKwEW7?@snSl)5r%!ekKyMi@*4DigziGcZ}`>Yo-}()e`n6 zJr;E?<>(=B!^Y?_ETLt*5&e9$g65%yMr@&n7B;lTg@rW?Htt+`@P63F4H8Xu$*>|# z^zgZ6Dbh43tC5--56N1ztE*^}T@_w=YT;wva!l9QF>z-^3L_a~#L?*NthSel#%Obk z7^^?`3c5rl2A;d9^Ak}3!s9$g@z~(AeSQEINeoeQn;i?RVS7ulMSee9N(X2~V1%`| z!MQ&YV2dz!gcw#32#Gav;*do$GxpKJr$V_XnQTD7F-nI@G1UY(E^}^-$$Z30ls7j@ z2q2;+%|KJMf|XgcM3&8QhHBJkF~$^g^jKm|nk>bXQcklLYu0Qz=9F{xTyk}F^XSR5 zyBDuiq$p}NmQ-@_QcA6uv?6oG=;{@YO*Y+Zi(A_A=3Cin!|`d>VoNPIZ>3f0(zRQU zJ@wqZmtJ??ag=u391OlHB^OeQ&+%t8@VMHHxv6Hezz3kSuGU$jtu+{DfAnIU2~BgbyyPs000SaNLh0L01FcU z01FcV0GgZ_00007bV*G`2j>F_4=M`5W3jFP001RPL_t&-(_?gZcmL0T1iZYwkhu&@ n33RuwX+_r5Sz1;u+Ai4#_yJJPV00000NkvXXu0mjf7tO0- literal 0 HcmV?d00001 diff --git a/addons/simple-state/icons/state.png.import b/addons/SpritesheetGenerator/Checker.png.import similarity index 67% rename from addons/simple-state/icons/state.png.import rename to addons/SpritesheetGenerator/Checker.png.import index 8fb2c43..7bcd8ec 100644 --- a/addons/simple-state/icons/state.png.import +++ b/addons/SpritesheetGenerator/Checker.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://msu07hn5ewo5" -path="res://.godot/imported/state.png-fa3dd722682a28f890f138dcc6e162af.ctex" +uid="uid://bnkl8rujlgv0h" +path="res://.godot/imported/Checker.png-95b82ca4c05ab143e1e16c56d598421b.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/simple-state/icons/state.png" -dest_files=["res://.godot/imported/state.png-fa3dd722682a28f890f138dcc6e162af.ctex"] +source_file="res://addons/SpritesheetGenerator/Checker.png" +dest_files=["res://.godot/imported/Checker.png-95b82ca4c05ab143e1e16c56d598421b.ctex"] [params] diff --git a/addons/SpritesheetGenerator/SpriteSheetGenerator.gd b/addons/SpritesheetGenerator/SpriteSheetGenerator.gd new file mode 100644 index 0000000..cbb9bbe --- /dev/null +++ b/addons/SpritesheetGenerator/SpriteSheetGenerator.gd @@ -0,0 +1,13 @@ +@tool +extends EditorPlugin + +func _enter_tree() -> void: + add_tool_menu_item("Open Spritesheet Generator", run_generator) + get_editor_interface().get_command_palette().add_command("Open Spritesheet Generator", "addons/open_spritesheet_generator", run_generator) + +func _exit_tree() -> void: + remove_tool_menu_item("Open Spritesheet Generator") + get_editor_interface().get_command_palette().remove_command("addons/open_spritesheet_generator") + +func run_generator(): + get_editor_interface().play_custom_scene("res://addons/SpritesheetGenerator/SpritesheetGenerator.tscn") diff --git a/addons/SpritesheetGenerator/SpritesheetFrame.tscn b/addons/SpritesheetGenerator/SpritesheetFrame.tscn new file mode 100644 index 0000000..790cf62 --- /dev/null +++ b/addons/SpritesheetGenerator/SpritesheetFrame.tscn @@ -0,0 +1,77 @@ +[gd_scene load_steps=3 format=3 uid="uid://cd5wndu01c1sn"] + +[sub_resource type="StyleBoxFlat" id="2"] +resource_local_to_scene = true +bg_color = Color(0, 0.501961, 0.501961, 1) + +[sub_resource type="GDScript" id="3"] +resource_name = "Prefab" +script/source = "extends PanelContainer + +var odd: Vector2 + +func set_frame_margin(margin: Vector2): + $MarginContainer.add_theme_constant_override(&\"margin_left\", margin.x) + $MarginContainer.add_theme_constant_override(&\"margin_top\", margin.y) + + margin += odd + + $MarginContainer.add_theme_constant_override(&\"margin_right\", margin.x) + $MarginContainer.add_theme_constant_override(&\"margin_bottom\", margin.y) + +func set_texture(texture: Texture2D): + %TextureRect.texture = texture + odd = Vector2(int(get_texture_size().x) % 2, int(get_texture_size().y) % 2) + +func get_texture_size() -> Vector2: + return %TextureRect.texture.get_size() + +func get_position2() -> Vector2: + return position + %TextureRect.position + +func get_texture_data() -> Image: + return %TextureRect.texture.get_image() + +func set_display_background(display: bool): + get_theme_stylebox(&\"panel\").draw_center = display + +func set_background_color(color: Color): + get_theme_stylebox(&\"panel\").bg_color = color + +func _get_drag_data(p: Vector2): + var preview = TextureRect.new() + preview.texture = %TextureRect.texture + preview.ignore_texture_size = true + preview.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED + preview.size = Vector2(64, 64) + set_drag_preview(preview) + return {type = \"SpritesheetFrame\", node = self} + +func _can_drop_data(p: Vector2, data) -> bool: + return data is Dictionary and data.get(\"type\", \"\") == \"SpritesheetFrame\" + +func _drop_data(p: Vector2, data) -> void: + var index = get_index() + get_parent().move_child(self, data.node.get_index()) + get_parent().move_child(data.node, index) + get_tree().current_scene.refresh_grid() + +func _gui_input(event: InputEvent) -> void: + if event is InputEventMouseButton: + if event.pressed and event.button_index == MOUSE_BUTTON_RIGHT: + get_tree().current_scene.remove_frame.call_deferred(self) +" + +[node name="FramePrefab" type="PanelContainer" groups=["frame"]] +theme_override_styles/panel = SubResource("2") +script = SubResource("3") + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 2 +mouse_filter = 2 + +[node name="TextureRect" type="TextureRect" parent="MarginContainer"] +unique_name_in_owner = true +texture_filter = 1 +layout_mode = 2 +stretch_mode = 4 diff --git a/addons/SpritesheetGenerator/SpritesheetGenerator.tscn b/addons/SpritesheetGenerator/SpritesheetGenerator.tscn new file mode 100644 index 0000000..c064e03 --- /dev/null +++ b/addons/SpritesheetGenerator/SpritesheetGenerator.tscn @@ -0,0 +1,714 @@ +[gd_scene load_steps=5 format=3 uid="uid://bf3b0i8scthbm"] + +[ext_resource type="Texture2D" uid="uid://bnkl8rujlgv0h" path="res://addons/SpritesheetGenerator/Checker.png" id="1_hs1uu"] + +[sub_resource type="GDScript" id="1"] +resource_name = "Generator" +script/source = "extends Control + +const SUPPORTED_FORMATS: PackedStringArray = [\"bmp\", \"dds\", \"exr\", \"hdr\", \"jpg\", \"jpeg\", \"png\", \"tga\", \"svg\", \"svgz\", \"webp\"] + +@onready var grid := %GridContainer + +var file_list: Array +var image_list: Array +var texture_list: Array + +var images_to_process: Array +var images_to_texturize: Array +var first_time := true +var image_count: int +var output_path: String + +var auto := true +var margin := Vector2.ONE + +var pan_origin: Vector2 +var pan_start: Vector2 + +signal images_processed + +func _enter_tree() -> void: + $SplitDialog.hide() + $StashDialog.hide() + +func _ready(): + $Status.text = $Status.text % \", \".join(SUPPORTED_FORMATS) + + get_viewport().files_dropped.connect(load_files) + grid.minimum_size_changed.connect(refresh_background) + set_process(false) + +func refresh_background(): + %Background.custom_minimum_size = grid.get_minimum_size() + +func load_files(files: PackedStringArray): + file_list.clear() + image_list.clear() + + %CustomName.text = \"\" + %Reload.disabled = false + %SavePNG.disabled = false + + if files.size() == 1 and not FileAccess.file_exists(files[0]): + var dir := DirAccess.open(files[0]) + if not dir: + show_error(\"Can't open directory.\") + return + + for file in dir.get_files(): + if file.get_extension() in SUPPORTED_FORMATS: + file_list.append(str(dir.get_current_dir().path_join(file))) + else: + var wrong_count: int + for file in files: + if file.get_extension() in SUPPORTED_FORMATS: + file_list.append(file) + else: + wrong_count += 1 + + if wrong_count > 0: + show_error(\"Skipped %s file(s) with unsupported extension.\" % wrong_count) + + if file_list.is_empty(): + show_error(\"No valid files or directories to process.\") + return + + load_images() + +func load_images(): + texture_list.clear() + + for image in grid.get_children(): + image.free() + + for image in %StashImages.get_children(): + image.free() + update_stash() + + var size_map: Dictionary + + if not file_list.is_empty(): + image_list = file_list.map(func(file: String): + var image := Image.load_from_file(file) + if image: + image.set_meta(&\"path\", file) + return image) + + for image in image_list: + if not image: + continue + + if not image.get_size() in size_map: + size_map[image.get_size()] = [] + size_map[image.get_size()].append(image) + + var output_name: String + var most_common_size: Vector2i + var most_common_count: int + + for size in size_map: + if size_map[size].size() > most_common_count: + most_common_size = size + most_common_count = size_map[size].size() + + for image in size_map[most_common_size]: + if output_path.is_empty(): + var path: String = image.get_meta(&\"path\", \"\") + output_path = path.get_base_dir() + output_name = path.get_base_dir().get_file() + + images_to_process.append(image) + size_map.clear() + + if not output_name.is_empty() and %CustomName.text.is_empty(): + %CustomName.text = output_name + update_save_button() + + if images_to_process.size() < file_list.size(): + show_error(\"Rejected %s image(s) due to size mismatch.\" % (file_list.size() - images_to_process.size())) + + if images_to_process.size() == 1: + if file_list.size() > 1: + images_to_process.clear() + show_error(\"Only one dropped image was valid.\") + else: + %SplitPreview.texture = ImageTexture.create_from_image(images_to_process[0]) + $SplitDialog.reset_size() + $SplitDialog.popup_centered() + + return + + $Status.show() + %CenterContainer.hide() + + image_count = images_to_process.size() + %Columns.max_value = image_count + + threshold = %Threshold.value + min_x = 9999999 + min_y = 9999999 + max_x = -9999999 + max_y = -9999999 + + set_process(true) + + await images_processed + + for texture in texture_list: + add_frame(texture) + + toggle_auto(auto) + refresh_margin() + + $Status.hide() + %CenterContainer.show() + +var threshold: float +var min_x: int +var min_y: int +var max_x: int +var max_y: int + +func _process(delta: float) -> void: + if not images_to_process.is_empty(): + var image: Image = images_to_process.pop_front() + $Status.text = str(\"Preprocessing image \", image_count - images_to_process.size(), \"/\", image_count) + + for x in image.get_width(): + for y in image.get_height(): + if image.get_pixel(x, y).a >= threshold: + min_x = mini(min_x, x) + min_y = mini(min_y, y) + max_x = maxi(max_x, x) + max_y = maxi(max_y, y) + + images_to_texturize.append(image) + elif not images_to_texturize.is_empty(): + var rect := Rect2i(min_x, min_y, max_x - min_x + 1, max_y - min_y + 1) + var image: Image = images_to_texturize.pop_front() + $Status.text = str(\"Creating texture \", image_count - images_to_texturize.size(), \"/\", image_count) + + var true_image := Image.create(rect.size.x, rect.size.y, false, image.get_format()) + true_image.blit_rect(image, rect, Vector2()) + + var texture := ImageTexture.create_from_image(true_image) + texture_list.append(texture) + + if images_to_texturize.is_empty(): + set_process(false) + images_processed.emit() + if first_time: + recenter() + first_time = false + +func toggle_grid(show: bool) -> void: + get_tree().call_group(&\"frame\", &\"set_display_background\", show) + +func toggle_auto(button_pressed: bool) -> void: + %Columns.editable = not button_pressed + auto = button_pressed + + if button_pressed: + var best: int + var best_score = -9999999 + + for i in range(1, image_count + 1): + var cols = i + var rows = ceili(image_count / float(i)) + + var score = image_count - cols * rows - maxi(cols, rows) - rows + if score > best_score: + best = i + best_score = score + + grid.columns = best + else: + grid.columns = %Columns.value + refresh_grid() + +func hmargin_changed(value: float) -> void: + margin.x = value + refresh_margin() + +func vmargin_changed(value: float) -> void: + margin.y = value + refresh_margin() + +func refresh_margin(): + get_tree().call_group(&\"frame\", &\"set_frame_margin\", margin) + +func columns_changed(value: float) -> void: + grid.columns = value + refresh_grid() + +func refresh_grid(): + var coord: Vector2 + var dark = false + + for rect in grid.get_children(): + rect.set_background_color(Color(0, 0, 0, 0.2 if dark else 0.1)) + dark = not dark + coord.x += 1 + + if coord.x == grid.columns: + coord.x = 0 + coord.y += 1 + dark = int(coord.y) % 2 == 1 + +func save_png() -> void: + var image_size: Vector2 = grid.get_child(0).get_minimum_size() + + var image := Image.create(image_size.x * grid.columns, image_size.y * (ceil(grid.get_child_count() / float(grid.columns))), false, Image.FORMAT_RGBA8) + + for rect in grid.get_children(): + image.blit_rect(rect.get_texture_data(), Rect2(Vector2(), image_size), rect.get_position2()) + + image.save_png(output_path.path_join(%CustomName.text) + \".png\") + +func show_error(text: String): + if not %Error.visible: + %Error.show() + else: + %Error.text += \"\\n\" + %Error.text += text + %Timer.start() + +func error_hidden() -> void: + %Error.text = \"\" + +func _input(event: InputEvent) -> void: + if event is InputEventMouseButton: + var cc: Control = %CenterContainer + + if event.button_index == MOUSE_BUTTON_MIDDLE: + if event.pressed: + pan_origin = get_local_mouse_position() + pan_start = cc.position + else: + pan_origin = Vector2() + + if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: + var lm = cc.get_local_mouse_position() + cc.scale -= Vector2.ONE * 0.05 + if cc.scale.x <= 0: + cc.scale = Vector2.ONE * 0.05 + + cc.position -= (lm - cc.get_local_mouse_position()) * cc.scale + elif event.button_index == MOUSE_BUTTON_WHEEL_UP: + var lm = cc.get_local_mouse_position() + cc.scale += Vector2.ONE * 0.05 + cc.position -= (lm - cc.get_local_mouse_position()) * cc.scale + + if event is InputEventMouseMotion: + if pan_origin != Vector2(): + %CenterContainer.position = pan_start + (get_local_mouse_position() - pan_origin) + +func recenter() -> void: + %CenterContainer.position = get_viewport().size / 2 - Vector2i(%CenterContainer.size) / 2 + %CenterContainer.scale = Vector2.ONE + +func update_split_preview(): + %SplitPreview.queue_redraw() + +func draw_split_preview() -> void: + var preview: TextureRect = %SplitPreview + var frame_count := Vector2(%SplitX.value, %SplitY.value) + var frame_size := preview.size / frame_count + + for x in range(1, frame_count.x): + for y in int(frame_count.y): + preview.draw_line(frame_size * Vector2(x, y), frame_size * Vector2(x, y + 1), Color.WHITE) + preview.draw_line(frame_size * Vector2(x, y) + Vector2.RIGHT, frame_size * Vector2(x, y + 1) + Vector2.RIGHT, Color.BLACK) + + for y in range(1, frame_count.y): + for x in int(frame_count.x): + preview.draw_line(frame_size * Vector2(x, y), frame_size * Vector2(x + 1, y), Color.WHITE) + preview.draw_line(frame_size * Vector2(x, y) + Vector2.DOWN, frame_size * Vector2(x + 1, y) + Vector2.DOWN, Color.BLACK) + +func split_spritesheet() -> void: + file_list.clear() + image_list.clear() + + var image: Image = images_to_process[0] + var sub_image_size := image.get_size() / Vector2i(%SplitX.value, %SplitY.value) + + for y in %SplitY.value: + for x in %SplitX.value: + image_list.append(image.get_region(Rect2i(Vector2i(x, y) * sub_image_size, sub_image_size))) + + images_to_process.clear() + load_images() + +func remove_frame(frame): + var image: Image = frame.get_texture_data() + var texture := ImageTexture.create_from_image(image) + + var button := TextureButton.new() + button.texture_normal = texture + button.custom_minimum_size = Vector2(128, 128) + button.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT_CENTERED + button.ignore_texture_size = true + button.pressed.connect(re_add_image.bind(button), CONNECT_DEFERRED) + %StashImages.add_child(button) + + var ref := ReferenceRect.new() + button.add_child(ref) + ref.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + ref.mouse_filter = Control.MOUSE_FILTER_IGNORE + ref.editor_only = false + + frame.free() + refresh_grid() + update_stash() + +func update_stash(): + %Stash.disabled = %StashImages.get_child_count() == 0 + +func re_add_image(tb: TextureButton): + add_frame(tb.texture_normal) + tb.free() + refresh_grid() + update_stash() + + if %Stash.disabled: + $StashDialog.hide() + +func add_frame(texture: Texture2D): + var rect := preload(\"res://addons/SpritesheetGenerator/SpritesheetFrame.tscn\").instantiate() + rect.set_texture(texture) + rect.set_display_background(%DisplayGrid.button_pressed) + rect.set_frame_margin(margin) + grid.add_child(rect) + +func update_save_button() -> void: + %SavePNG.disabled = %CustomName.text.is_empty() +" + +[sub_resource type="StyleBoxFlat" id="5"] +content_margin_left = 20.0 +content_margin_top = 20.0 +content_margin_right = 20.0 +content_margin_bottom = 20.0 +bg_color = Color(0, 0, 0, 0.25098) + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_kjgn5"] +texture = ExtResource("1_hs1uu") +axis_stretch_horizontal = 1 +axis_stretch_vertical = 1 + +[node name="Main" type="HBoxContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = SubResource("1") + +[node name="MarginContainer" type="PanelContainer" parent="."] +layout_mode = 2 +theme_override_styles/panel = SubResource("5") + +[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 10 + +[node name="Label5" type="Label" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Alpha Threshold" +horizontal_alignment = 1 + +[node name="Threshold" type="SpinBox" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +max_value = 1.0 +step = 0.005 +value = 0.9 + +[node name="Reload" type="Button" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +disabled = true +text = "Reload" + +[node name="HSeparator" type="HSeparator" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Columns" +horizontal_alignment = 1 + +[node name="Columns" type="SpinBox" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +min_value = 1.0 +value = 1.0 +editable = false + +[node name="Grid" type="CheckButton" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +button_pressed = true +text = "Auto" + +[node name="Label3" type="Label" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Horizontal Margin" +horizontal_alignment = 1 + +[node name="MarginH" type="SpinBox" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +value = 1.0 +suffix = "px" + +[node name="Label4" type="Label" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Vertical Margin" +horizontal_alignment = 1 + +[node name="MarginV" type="SpinBox" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +max_value = 128.0 +value = 1.0 +suffix = "px" + +[node name="Stash" type="Button" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +disabled = true +text = "Image Stash" + +[node name="HSeparator2" type="HSeparator" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="Button" type="Button" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "Recenter View +" + +[node name="DisplayGrid" type="CheckBox" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +button_pressed = true +text = "Show Grid" + +[node name="HSeparator3" type="HSeparator" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="CustomName" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "Image Name" + +[node name="SavePNG" type="Button" parent="MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +disabled = true +text = "Save PNG" + +[node name="Status" type="Label" parent="."] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +text = "Drop folder or image files here to start. + +Images should be of the same size. If their sizes don't match, the generator will try to use the dominating size. + +The images will be automatically cropped based on the Alpha Threshold value. Greater value means more exact crop. + +Supported formats: %s + +If you drop a single image, the generator will instead edit it as spritesheet." +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="View" type="CanvasLayer" parent="."] +layer = -1 + +[node name="CenterContainer" type="CenterContainer" parent="View"] +unique_name_in_owner = true +visible = false +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 + +[node name="Background" type="ColorRect" parent="View/CenterContainer"] +unique_name_in_owner = true +layout_mode = 2 +mouse_filter = 1 +color = Color(0, 0.501961, 0.501961, 1) + +[node name="GridContainer" type="GridContainer" parent="View/CenterContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/h_separation = 0 +theme_override_constants/v_separation = 0 +columns = 3 + +[node name="VBoxContainer" type="GridContainer" parent="View"] +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -40.0 +offset_top = -40.0 +grow_horizontal = 0 +grow_vertical = 0 +mouse_filter = 2 +columns = 3 + +[node name="Label" type="Label" parent="View/VBoxContainer"] +layout_mode = 2 +text = "LMB" +horizontal_alignment = 1 + +[node name="VSeparator" type="VSeparator" parent="View/VBoxContainer"] +layout_mode = 2 + +[node name="Label2" type="Label" parent="View/VBoxContainer"] +layout_mode = 2 +text = "rearrange images" + +[node name="Label3" type="Label" parent="View/VBoxContainer"] +layout_mode = 2 +text = "RMB" +horizontal_alignment = 1 + +[node name="VSeparator2" type="VSeparator" parent="View/VBoxContainer"] +layout_mode = 2 + +[node name="Label4" type="Label" parent="View/VBoxContainer"] +layout_mode = 2 +text = "delete images" + +[node name="Label5" type="Label" parent="View/VBoxContainer"] +layout_mode = 2 +text = "MMB" +horizontal_alignment = 1 + +[node name="VSeparator3" type="VSeparator" parent="View/VBoxContainer"] +layout_mode = 2 + +[node name="Label6" type="Label" parent="View/VBoxContainer"] +layout_mode = 2 +text = "pan view" + +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="Error" type="Label" parent="CanvasLayer"] +unique_name_in_owner = true +modulate = Color(1, 0, 0, 1) +anchors_preset = 12 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -14.0 +grow_horizontal = 2 +grow_vertical = 0 +size_flags_vertical = 0 +horizontal_alignment = 1 + +[node name="Timer" type="Timer" parent="CanvasLayer"] +unique_name_in_owner = true +wait_time = 5.0 +one_shot = true + +[node name="SplitDialog" type="ConfirmationDialog" parent="."] +title = "Edit Spritesheet" +position = Vector2i(-500, 0) +size = Vector2i(272, 343) +visible = true + +[node name="VBoxContainer" type="VBoxContainer" parent="SplitDialog"] +offset_left = 8.0 +offset_top = 8.0 +offset_right = 264.0 +offset_bottom = 294.0 + +[node name="Label" type="Label" parent="SplitDialog/VBoxContainer"] +layout_mode = 2 +text = "Split Frames" +horizontal_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="SplitDialog/VBoxContainer"] +layout_mode = 2 +alignment = 1 + +[node name="SplitX" type="SpinBox" parent="SplitDialog/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +min_value = 1.0 +max_value = 1000.0 +value = 1.0 +select_all_on_focus = true + +[node name="Label" type="Label" parent="SplitDialog/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "x" + +[node name="SplitY" type="SpinBox" parent="SplitDialog/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +min_value = 1.0 +max_value = 1000.0 +value = 1.0 +select_all_on_focus = true + +[node name="CenterContainer" type="CenterContainer" parent="SplitDialog/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="PanelContainer" type="PanelContainer" parent="SplitDialog/VBoxContainer/CenterContainer"] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxTexture_kjgn5") + +[node name="SplitPreview" type="TextureRect" parent="SplitDialog/VBoxContainer/CenterContainer/PanelContainer"] +unique_name_in_owner = true +layout_mode = 2 + +[node name="StashDialog" type="AcceptDialog" parent="."] +title = "Image Stash" +position = Vector2i(-500, 500) +size = Vector2i(309, 100) +visible = true + +[node name="VBoxContainer" type="VBoxContainer" parent="StashDialog"] +offset_left = 8.0 +offset_top = 8.0 +offset_right = 301.0 +offset_bottom = 51.0 + +[node name="Label" type="Label" parent="StashDialog/VBoxContainer"] +layout_mode = 2 +text = "Click frame to re-add it to spritesheet." +horizontal_alignment = 1 + +[node name="StashImages" type="HFlowContainer" parent="StashDialog/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 + +[connection signal="pressed" from="MarginContainer/VBoxContainer/Reload" to="." method="load_images"] +[connection signal="value_changed" from="MarginContainer/VBoxContainer/Columns" to="." method="columns_changed"] +[connection signal="toggled" from="MarginContainer/VBoxContainer/Grid" to="." method="toggle_auto"] +[connection signal="value_changed" from="MarginContainer/VBoxContainer/MarginH" to="." method="hmargin_changed"] +[connection signal="value_changed" from="MarginContainer/VBoxContainer/MarginV" to="." method="vmargin_changed"] +[connection signal="pressed" from="MarginContainer/VBoxContainer/Stash" to="StashDialog" method="popup_centered_ratio" binds= [0.5]] +[connection signal="pressed" from="MarginContainer/VBoxContainer/Button" to="." method="recenter"] +[connection signal="toggled" from="MarginContainer/VBoxContainer/DisplayGrid" to="." method="toggle_grid"] +[connection signal="text_changed" from="MarginContainer/VBoxContainer/HBoxContainer/CustomName" to="." method="update_save_button" unbinds=1] +[connection signal="pressed" from="MarginContainer/VBoxContainer/SavePNG" to="." method="save_png"] +[connection signal="hidden" from="CanvasLayer/Error" to="." method="error_hidden"] +[connection signal="timeout" from="CanvasLayer/Timer" to="CanvasLayer/Error" method="hide"] +[connection signal="confirmed" from="SplitDialog" to="." method="split_spritesheet"] +[connection signal="value_changed" from="SplitDialog/VBoxContainer/HBoxContainer/SplitX" to="." method="update_split_preview" unbinds=1] +[connection signal="value_changed" from="SplitDialog/VBoxContainer/HBoxContainer/SplitY" to="." method="update_split_preview" unbinds=1] +[connection signal="draw" from="SplitDialog/VBoxContainer/CenterContainer/PanelContainer/SplitPreview" to="." method="draw_split_preview"] diff --git a/addons/SpritesheetGenerator/plugin.cfg b/addons/SpritesheetGenerator/plugin.cfg new file mode 100644 index 0000000..08a28bf --- /dev/null +++ b/addons/SpritesheetGenerator/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Spritesheet Generator" +description="Generates cropped spritesheets from multiple images." +author="KoBeWi" +version="1.2" +script="SpriteSheetGenerator.gd" diff --git a/addons/fontawesome/All.gd b/addons/fontawesome/All.gd new file mode 100644 index 0000000..4ef5a8c --- /dev/null +++ b/addons/fontawesome/All.gd @@ -0,0 +1,2029 @@ +## AUTOGENERATED BY dump_eet.html, DO NOT MODIFY!!! +const all: Dictionary = { + "regular": { + "trash-can": "\uf2ed", + "message": "\uf27a", + "file-lines": "\uf15c", + "calendar-days": "\uf073", + "hand-point-right": "\uf0a4", + "face-smile-beam": "\uf5b8", + "face-grin-stars": "\uf587", + "address-book": "\uf2b9", + "comments": "\uf086", + "paste": "\uf0ea", + "face-grin-tongue-squint": "\uf58a", + "face-flushed": "\uf579", + "square-caret-right": "\uf152", + "square-minus": "\uf146", + "compass": "\uf14e", + "square-caret-down": "\uf150", + "face-kiss-beam": "\uf597", + "lightbulb": "\uf0eb", + "flag": "\uf024", + "square-check": "\uf14a", + "circle-dot": "\uf192", + "face-dizzy": "\uf567", + "futbol": "\uf1e3", + "pen-to-square": "\uf044", + "hourglass-half": "\uf252", + "eye-slash": "\uf070", + "hand": "\uf256", + "hand-spock": "\uf259", + "face-kiss": "\uf596", + "face-grin-tongue": "\uf589", + "chess-bishop": "\uf43a", + "face-grin-wink": "\uf58c", + "face-grin-wide": "\uf581", + "face-frown-open": "\uf57a", + "hand-point-up": "\uf0a6", + "bookmark": "\uf02e", + "hand-point-down": "\uf0a7", + "folder": "\uf07b", + "user": "\uf007", + "square-caret-left": "\uf191", + "star": "\uf005", + "chess-knight": "\uf441", + "face-laugh-squint": "\uf59b", + "face-laugh": "\uf599", + "folder-open": "\uf07c", + "clipboard": "\uf328", + "chess-queen": "\uf445", + "hand-back-fist": "\uf255", + "square-caret-up": "\uf151", + "chart-bar": "\uf080", + "window-restore": "\uf2d2", + "square-plus": "\uf0fe", + "image": "\uf03e", + "folder-closed": "\ue185", + "lemon": "\uf094", + "handshake": "\uf2b5", + "gem": "\uf3a5", + "circle-play": "\uf144", + "circle-check": "\uf058", + "circle-stop": "\uf28d", + "id-badge": "\uf2c1", + "face-laugh-beam": "\uf59a", + "registered": "\uf25d", + "address-card": "\uf2bb", + "face-tired": "\uf5c8", + "font-awesome": "\uf2b4", + "face-smile-wink": "\uf4da", + "file-word": "\uf1c2", + "file-powerpoint": "\uf1c4", + "envelope-open": "\uf2b6", + "file-zipper": "\uf1c6", + "square": "\uf0c8", + "snowflake": "\uf2dc", + "newspaper": "\uf1ea", + "face-kiss-wink-heart": "\uf598", + "star-half-stroke": "\uf5c0", + "file-excel": "\uf1c3", + "face-grin-beam": "\uf582", + "object-ungroup": "\uf248", + "circle-right": "\uf35a", + "face-rolling-eyes": "\uf5a5", + "object-group": "\uf247", + "heart": "\uf004", + "face-surprise": "\uf5c2", + "circle-pause": "\uf28b", + "circle": "\uf111", + "circle-up": "\uf35b", + "file-audio": "\uf1c7", + "file-image": "\uf1c5", + "circle-question": "\uf059", + "face-meh-blank": "\uf5a4", + "eye": "\uf06e", + "face-sad-cry": "\uf5b3", + "file-code": "\uf1c9", + "window-maximize": "\uf2d0", + "face-frown": "\uf119", + "floppy-disk": "\uf0c7", + "comment-dots": "\uf4ad", + "face-grin-squint": "\uf585", + "hand-pointer": "\uf25a", + "hand-scissors": "\uf257", + "face-grin-tears": "\uf588", + "calendar-xmark": "\uf273", + "file-video": "\uf1c8", + "file-pdf": "\uf1c1", + "comment": "\uf075", + "envelope": "\uf0e0", + "hourglass": "\uf254", + "calendar-check": "\uf274", + "hard-drive": "\uf0a0", + "face-grin-squint-tears": "\uf586", + "rectangle-list": "\uf022", + "calendar-plus": "\uf271", + "circle-left": "\uf359", + "money-bill-1": "\uf3d1", + "clock": "\uf017", + "keyboard": "\uf11c", + "closed-captioning": "\uf20a", + "images": "\uf302", + "face-grin": "\uf580", + "face-meh": "\uf11a", + "id-card": "\uf2c2", + "sun": "\uf185", + "face-laugh-wink": "\uf59c", + "circle-down": "\uf358", + "thumbs-down": "\uf165", + "chess-pawn": "\uf443", + "credit-card": "\uf09d", + "bell": "\uf0f3", + "file": "\uf15b", + "hospital": "\uf0f8", + "chess-rook": "\uf447", + "star-half": "\uf089", + "chess-king": "\uf43f", + "circle-user": "\uf2bd", + "copy": "\uf0c5", + "share-from-square": "\uf14d", + "copyright": "\uf1f9", + "map": "\uf279", + "bell-slash": "\uf1f6", + "hand-lizard": "\uf258", + "face-smile": "\uf118", + "hand-peace": "\uf25b", + "face-grin-hearts": "\uf584", + "building": "\uf1ad", + "face-grin-beam-sweat": "\uf583", + "moon": "\uf186", + "calendar": "\uf133", + "face-grin-tongue-wink": "\uf58b", + "clone": "\uf24d", + "face-angry": "\uf556", + "rectangle-xmark": "\uf410", + "paper-plane": "\uf1d8", + "life-ring": "\uf1cd", + "face-grimace": "\uf57f", + "calendar-minus": "\uf272", + "circle-xmark": "\uf057", + "thumbs-up": "\uf164", + "window-minimize": "\uf2d1", + "square-full": "\uf45c", + "note-sticky": "\uf249", + "face-sad-tear": "\uf5b4", + "hand-point-left": "\uf0a5", + }, + "brands": { + "monero": "\uf3d0", + "hooli": "\uf427", + "yelp": "\uf1e9", + "cc-visa": "\uf1f0", + "lastfm": "\uf202", + "shopware": "\uf5b5", + "creative-commons-nc": "\uf4e8", + "aws": "\uf375", + "redhat": "\uf7bc", + "yoast": "\uf2b1", + "cloudflare": "\ue07d", + "ups": "\uf7e0", + "wpexplorer": "\uf2de", + "dyalog": "\uf399", + "bity": "\uf37a", + "stackpath": "\uf842", + "buysellads": "\uf20d", + "first-order": "\uf2b0", + "modx": "\uf285", + "guilded": "\ue07e", + "vnv": "\uf40b", + "square-js": "\uf3b9", + "microsoft": "\uf3ca", + "qq": "\uf1d6", + "orcid": "\uf8d2", + "java": "\uf4e4", + "invision": "\uf7b0", + "creative-commons-pd-alt": "\uf4ed", + "centercode": "\uf380", + "glide-g": "\uf2a6", + "drupal": "\uf1a9", + "hire-a-helper": "\uf3b0", + "creative-commons-by": "\uf4e7", + "unity": "\ue049", + "whmcs": "\uf40d", + "rocketchat": "\uf3e8", + "vk": "\uf189", + "untappd": "\uf405", + "mailchimp": "\uf59e", + "css3-alt": "\uf38b", + "square-reddit": "\uf1a2", + "vimeo-v": "\uf27d", + "contao": "\uf26d", + "square-font-awesome": "\ue5ad", + "deskpro": "\uf38f", + "sistrix": "\uf3ee", + "square-instagram": "\ue055", + "battle-net": "\uf835", + "the-red-yeti": "\uf69d", + "square-hacker-news": "\uf3af", + "edge": "\uf282", + "napster": "\uf3d2", + "square-snapchat": "\uf2ad", + "google-plus-g": "\uf0d5", + "artstation": "\uf77a", + "markdown": "\uf60f", + "sourcetree": "\uf7d3", + "google-plus": "\uf2b3", + "diaspora": "\uf791", + "foursquare": "\uf180", + "stack-overflow": "\uf16c", + "github-alt": "\uf113", + "phoenix-squadron": "\uf511", + "pagelines": "\uf18c", + "algolia": "\uf36c", + "red-river": "\uf3e3", + "creative-commons-sa": "\uf4ef", + "safari": "\uf267", + "google": "\uf1a0", + "square-font-awesome-stroke": "\uf35c", + "atlassian": "\uf77b", + "linkedin-in": "\uf0e1", + "digital-ocean": "\uf391", + "nimblr": "\uf5a8", + "chromecast": "\uf838", + "evernote": "\uf839", + "hacker-news": "\uf1d4", + "creative-commons-sampling": "\uf4f0", + "adversal": "\uf36a", + "creative-commons": "\uf25e", + "watchman-monitoring": "\ue087", + "fonticons": "\uf280", + "weixin": "\uf1d7", + "shirtsinbulk": "\uf214", + "codepen": "\uf1cb", + "git-alt": "\uf841", + "lyft": "\uf3c3", + "rev": "\uf5b2", + "windows": "\uf17a", + "wizards-of-the-coast": "\uf730", + "square-viadeo": "\uf2aa", + "meetup": "\uf2e0", + "centos": "\uf789", + "adn": "\uf170", + "cloudsmith": "\uf384", + "pied-piper-alt": "\uf1a8", + "square-dribbble": "\uf397", + "codiepie": "\uf284", + "node": "\uf419", + "mix": "\uf3cb", + "steam": "\uf1b6", + "cc-apple-pay": "\uf416", + "scribd": "\uf28a", + "openid": "\uf19b", + "instalod": "\ue081", + "expeditedssl": "\uf23e", + "sellcast": "\uf2da", + "square-twitter": "\uf081", + "r-project": "\uf4f7", + "delicious": "\uf1a5", + "freebsd": "\uf3a4", + "vuejs": "\uf41f", + "accusoft": "\uf369", + "ioxhost": "\uf208", + "fonticons-fi": "\uf3a2", + "app-store": "\uf36f", + "cc-mastercard": "\uf1f1", + "itunes-note": "\uf3b5", + "golang": "\ue40f", + "kickstarter": "\uf3bb", + "grav": "\uf2d6", + "weibo": "\uf18a", + "uncharted": "\ue084", + "firstdraft": "\uf3a1", + "square-youtube": "\uf431", + "wikipedia-w": "\uf266", + "wpressr": "\uf3e4", + "angellist": "\uf209", + "galactic-republic": "\uf50c", + "nfc-directional": "\ue530", + "skype": "\uf17e", + "joget": "\uf3b7", + "fedora": "\uf798", + "stripe-s": "\uf42a", + "meta": "\ue49b", + "laravel": "\uf3bd", + "hotjar": "\uf3b1", + "bluetooth-b": "\uf294", + "sticker-mule": "\uf3f7", + "creative-commons-zero": "\uf4f3", + "hips": "\uf452", + "behance": "\uf1b4", + "reddit": "\uf1a1", + "discord": "\uf392", + "chrome": "\uf268", + "app-store-ios": "\uf370", + "cc-discover": "\uf1f2", + "wpbeginner": "\uf297", + "confluence": "\uf78d", + "mdb": "\uf8ca", + "dochub": "\uf394", + "accessible-icon": "\uf368", + "ebay": "\uf4f4", + "amazon": "\uf270", + "unsplash": "\ue07c", + "yarn": "\uf7e3", + "square-steam": "\uf1b7", + "500px": "\uf26e", + "square-vimeo": "\uf194", + "asymmetrik": "\uf372", + "font-awesome": "\uf2b4", + "gratipay": "\uf184", + "apple": "\uf179", + "hive": "\ue07f", + "gitkraken": "\uf3a6", + "keybase": "\uf4f5", + "apple-pay": "\uf415", + "padlet": "\ue4a0", + "amazon-pay": "\uf42c", + "square-github": "\uf092", + "stumbleupon": "\uf1a4", + "fedex": "\uf797", + "phoenix-framework": "\uf3dc", + "shopify": "\ue057", + "neos": "\uf612", + "hackerrank": "\uf5f7", + "researchgate": "\uf4f8", + "swift": "\uf8e1", + "angular": "\uf420", + "speakap": "\uf3f3", + "angrycreative": "\uf36e", + "y-combinator": "\uf23b", + "empire": "\uf1d1", + "envira": "\uf299", + "square-gitlab": "\ue5ae", + "studiovinari": "\uf3f8", + "pied-piper": "\uf2ae", + "wordpress": "\uf19a", + "product-hunt": "\uf288", + "firefox": "\uf269", + "linode": "\uf2b8", + "goodreads": "\uf3a8", + "square-odnoklassniki": "\uf264", + "jsfiddle": "\uf1cc", + "sith": "\uf512", + "themeisle": "\uf2b2", + "page4": "\uf3d7", + "hashnode": "\ue499", + "react": "\uf41b", + "cc-paypal": "\uf1f4", + "squarespace": "\uf5be", + "cc-stripe": "\uf1f5", + "creative-commons-share": "\uf4f2", + "bitcoin": "\uf379", + "keycdn": "\uf3ba", + "opera": "\uf26a", + "itch-io": "\uf83a", + "umbraco": "\uf8e8", + "galactic-senate": "\uf50d", + "ubuntu": "\uf7df", + "draft2digital": "\uf396", + "stripe": "\uf429", + "houzz": "\uf27c", + "gg": "\uf260", + "dhl": "\uf790", + "square-pinterest": "\uf0d3", + "xing": "\uf168", + "blackberry": "\uf37b", + "creative-commons-pd": "\uf4ec", + "playstation": "\uf3df", + "quinscape": "\uf459", + "less": "\uf41d", + "blogger-b": "\uf37d", + "opencart": "\uf23d", + "vine": "\uf1ca", + "paypal": "\uf1ed", + "gitlab": "\uf296", + "typo3": "\uf42b", + "reddit-alien": "\uf281", + "yahoo": "\uf19e", + "dailymotion": "\ue052", + "affiliatetheme": "\uf36b", + "pied-piper-pp": "\uf1a7", + "bootstrap": "\uf836", + "odnoklassniki": "\uf263", + "nfc-symbol": "\ue531", + "ethereum": "\uf42e", + "speaker-deck": "\uf83c", + "creative-commons-nc-eu": "\uf4e9", + "patreon": "\uf3d9", + "avianex": "\uf374", + "ello": "\uf5f1", + "gofore": "\uf3a7", + "bimobject": "\uf378", + "facebook-f": "\uf39e", + "square-google-plus": "\uf0d4", + "mandalorian": "\uf50f", + "first-order-alt": "\uf50a", + "osi": "\uf41a", + "google-wallet": "\uf1ee", + "d-and-d-beyond": "\uf6ca", + "periscope": "\uf3da", + "fulcrum": "\uf50b", + "cloudscale": "\uf383", + "forumbee": "\uf211", + "mizuni": "\uf3cc", + "schlix": "\uf3ea", + "square-xing": "\uf169", + "bandcamp": "\uf2d5", + "wpforms": "\uf298", + "cloudversify": "\uf385", + "usps": "\uf7e1", + "megaport": "\uf5a3", + "magento": "\uf3c4", + "spotify": "\uf1bc", + "optin-monster": "\uf23c", + "fly": "\uf417", + "aviato": "\uf421", + "itunes": "\uf3b4", + "cuttlefish": "\uf38c", + "blogger": "\uf37c", + "flickr": "\uf16e", + "viber": "\uf409", + "soundcloud": "\uf1be", + "digg": "\uf1a6", + "tencent-weibo": "\uf1d5", + "symfony": "\uf83d", + "maxcdn": "\uf136", + "etsy": "\uf2d7", + "facebook-messenger": "\uf39f", + "audible": "\uf373", + "think-peaks": "\uf731", + "bilibili": "\ue3d9", + "erlang": "\uf39d", + "cotton-bureau": "\uf89e", + "dashcube": "\uf210", + "42-group": "\ue080", + "stack-exchange": "\uf18d", + "elementor": "\uf430", + "square-pied-piper": "\ue01e", + "creative-commons-nd": "\uf4eb", + "palfed": "\uf3d8", + "superpowers": "\uf2dd", + "resolving": "\uf3e7", + "xbox": "\uf412", + "searchengin": "\uf3eb", + "tiktok": "\ue07b", + "square-facebook": "\uf082", + "renren": "\uf18b", + "linux": "\uf17c", + "glide": "\uf2a5", + "linkedin": "\uf08c", + "hubspot": "\uf3b2", + "deploydog": "\uf38e", + "twitch": "\uf1e8", + "ravelry": "\uf2d9", + "mixer": "\ue056", + "square-lastfm": "\uf203", + "vimeo": "\uf40a", + "mendeley": "\uf7b3", + "uniregistry": "\uf404", + "figma": "\uf799", + "creative-commons-remix": "\uf4ee", + "cc-amazon-pay": "\uf42d", + "dropbox": "\uf16b", + "instagram": "\uf16d", + "cmplid": "\ue360", + "facebook": "\uf09a", + "gripfire": "\uf3ac", + "jedi-order": "\uf50e", + "uikit": "\uf403", + "fort-awesome-alt": "\uf3a3", + "phabricator": "\uf3db", + "ussunnah": "\uf407", + "earlybirds": "\uf39a", + "trade-federation": "\uf513", + "autoprefixer": "\uf41c", + "whatsapp": "\uf232", + "slideshare": "\uf1e7", + "google-play": "\uf3ab", + "viadeo": "\uf2a9", + "line": "\uf3c0", + "google-drive": "\uf3aa", + "servicestack": "\uf3ec", + "simplybuilt": "\uf215", + "bitbucket": "\uf171", + "imdb": "\uf2d8", + "deezer": "\ue077", + "raspberry-pi": "\uf7bb", + "jira": "\uf7b1", + "docker": "\uf395", + "screenpal": "\ue570", + "bluetooth": "\uf293", + "gitter": "\uf426", + "d-and-d": "\uf38d", + "microblog": "\ue01a", + "cc-diners-club": "\uf24c", + "gg-circle": "\uf261", + "pied-piper-hat": "\uf4e5", + "kickstarter-k": "\uf3bc", + "yandex": "\uf413", + "readme": "\uf4d5", + "html5": "\uf13b", + "sellsy": "\uf213", + "sass": "\uf41e", + "wirsindhandwerk": "\ue2d0", + "buromobelexperte": "\uf37f", + "salesforce": "\uf83b", + "octopus-deploy": "\ue082", + "medapps": "\uf3c6", + "ns8": "\uf3d5", + "pinterest-p": "\uf231", + "apper": "\uf371", + "fort-awesome": "\uf286", + "waze": "\uf83f", + "cc-jcb": "\uf24b", + "snapchat": "\uf2ab", + "fantasy-flight-games": "\uf6dc", + "rust": "\ue07a", + "wix": "\uf5cf", + "square-behance": "\uf1b5", + "supple": "\uf3f9", + "rebel": "\uf1d0", + "css3": "\uf13c", + "staylinked": "\uf3f5", + "kaggle": "\uf5fa", + "space-awesome": "\ue5ac", + "deviantart": "\uf1bd", + "cpanel": "\uf388", + "goodreads-g": "\uf3a9", + "square-git": "\uf1d2", + "square-tumblr": "\uf174", + "trello": "\uf181", + "creative-commons-nc-jp": "\uf4ea", + "get-pocket": "\uf265", + "perbyte": "\ue083", + "grunt": "\uf3ad", + "weebly": "\uf5cc", + "connectdevelop": "\uf20e", + "leanpub": "\uf212", + "black-tie": "\uf27e", + "themeco": "\uf5c6", + "python": "\uf3e2", + "android": "\uf17b", + "bots": "\ue340", + "free-code-camp": "\uf2c5", + "hornbill": "\uf592", + "js": "\uf3b8", + "ideal": "\ue013", + "git": "\uf1d3", + "dev": "\uf6cc", + "sketch": "\uf7c6", + "yandex-international": "\uf414", + "cc-amex": "\uf1f3", + "uber": "\uf402", + "github": "\uf09b", + "php": "\uf457", + "alipay": "\uf642", + "youtube": "\uf167", + "skyatlas": "\uf216", + "firefox-browser": "\ue007", + "replyd": "\uf3e6", + "suse": "\uf7d6", + "jenkins": "\uf3b6", + "twitter": "\uf099", + "rockrms": "\uf3e9", + "pinterest": "\uf0d2", + "buffer": "\uf837", + "npm": "\uf3d4", + "yammer": "\uf840", + "btc": "\uf15a", + "dribbble": "\uf17d", + "stumbleupon-circle": "\uf1a3", + "internet-explorer": "\uf26b", + "stubber": "\ue5c7", + "telegram": "\uf2c6", + "old-republic": "\uf510", + "odysee": "\ue5c6", + "square-whatsapp": "\uf40c", + "node-js": "\uf3d3", + "edge-legacy": "\ue078", + "slack": "\uf198", + "medrt": "\uf3c8", + "usb": "\uf287", + "tumblr": "\uf173", + "vaadin": "\uf408", + "quora": "\uf2c4", + "reacteurope": "\uf75d", + "medium": "\uf23a", + "amilia": "\uf36d", + "mixcloud": "\uf289", + "flipboard": "\uf44d", + "viacoin": "\uf237", + "critical-role": "\uf6c9", + "sitrox": "\ue44a", + "discourse": "\uf393", + "joomla": "\uf1aa", + "mastodon": "\uf4f6", + "airbnb": "\uf834", + "wolf-pack-battalion": "\uf514", + "buy-n-large": "\uf8a6", + "gulp": "\uf3ae", + "creative-commons-sampling-plus": "\uf4f1", + "strava": "\uf428", + "ember": "\uf423", + "canadian-maple-leaf": "\uf785", + "teamspeak": "\uf4f9", + "pushed": "\uf3e1", + "wordpress-simple": "\uf411", + "nutritionix": "\uf3d6", + "wodu": "\ue088", + "google-pay": "\ue079", + "intercom": "\uf7af", + "zhihu": "\uf63f", + "korvue": "\uf42f", + "pix": "\ue43a", + "steam-symbol": "\uf3f6", + }, + "solid": { + "0": "\u0030", + "1": "\u0031", + "2": "\u0032", + "3": "\u0033", + "4": "\u0034", + "5": "\u0035", + "6": "\u0036", + "7": "\u0037", + "8": "\u0038", + "9": "\u0039", + "fill-drip": "\uf576", + "arrows-to-circle": "\ue4bd", + "circle-chevron-right": "\uf138", + "at": "\u0040", + "trash-can": "\uf2ed", + "text-height": "\uf034", + "user-xmark": "\uf235", + "stethoscope": "\uf0f1", + "message": "\uf27a", + "info": "\uf129", + "down-left-and-up-right-to-center": "\uf422", + "explosion": "\ue4e9", + "file-lines": "\uf15c", + "wave-square": "\uf83e", + "ring": "\uf70b", + "building-un": "\ue4d9", + "dice-three": "\uf527", + "calendar-days": "\uf073", + "anchor-circle-check": "\ue4aa", + "building-circle-arrow-right": "\ue4d1", + "volleyball": "\uf45f", + "arrows-up-to-line": "\ue4c2", + "sort-down": "\uf0dd", + "circle-minus": "\uf056", + "door-open": "\uf52b", + "right-from-bracket": "\uf2f5", + "atom": "\uf5d2", + "soap": "\ue06e", + "icons": "\uf86d", + "microphone-lines-slash": "\uf539", + "bridge-circle-check": "\ue4c9", + "pump-medical": "\ue06a", + "fingerprint": "\uf577", + "hand-point-right": "\uf0a4", + "magnifying-glass-location": "\uf689", + "forward-step": "\uf051", + "face-smile-beam": "\uf5b8", + "flag-checkered": "\uf11e", + "football": "\uf44e", + "school-circle-exclamation": "\ue56c", + "crop": "\uf125", + "angles-down": "\uf103", + "users-rectangle": "\ue594", + "people-roof": "\ue537", + "people-line": "\ue534", + "beer-mug-empty": "\uf0fc", + "diagram-predecessor": "\ue477", + "arrow-up-long": "\uf176", + "fire-flame-simple": "\uf46a", + "person": "\uf183", + "laptop": "\uf109", + "file-csv": "\uf6dd", + "menorah": "\uf676", + "truck-plane": "\ue58f", + "record-vinyl": "\uf8d9", + "face-grin-stars": "\uf587", + "bong": "\uf55c", + "spaghetti-monster-flying": "\uf67b", + "arrow-down-up-across-line": "\ue4af", + "spoon": "\uf2e5", + "jar-wheat": "\ue517", + "envelopes-bulk": "\uf674", + "file-circle-exclamation": "\ue4eb", + "circle-h": "\uf47e", + "pager": "\uf815", + "address-book": "\uf2b9", + "strikethrough": "\uf0cc", + "k": "\u004b", + "landmark-flag": "\ue51c", + "pencil": "\uf303", + "backward": "\uf04a", + "caret-right": "\uf0da", + "comments": "\uf086", + "paste": "\uf0ea", + "code-pull-request": "\ue13c", + "clipboard-list": "\uf46d", + "truck-ramp-box": "\uf4de", + "user-check": "\uf4fc", + "vial-virus": "\ue597", + "sheet-plastic": "\ue571", + "blog": "\uf781", + "user-ninja": "\uf504", + "person-arrow-up-from-line": "\ue539", + "scroll-torah": "\uf6a0", + "broom-ball": "\uf458", + "toggle-off": "\uf204", + "box-archive": "\uf187", + "person-drowning": "\ue545", + "arrow-down-9-1": "\uf886", + "face-grin-tongue-squint": "\uf58a", + "spray-can": "\uf5bd", + "truck-monster": "\uf63b", + "w": "\u0057", + "earth-africa": "\uf57c", + "rainbow": "\uf75b", + "circle-notch": "\uf1ce", + "tablet-screen-button": "\uf3fa", + "paw": "\uf1b0", + "cloud": "\uf0c2", + "trowel-bricks": "\ue58a", + "face-flushed": "\uf579", + "hospital-user": "\uf80d", + "tent-arrow-left-right": "\ue57f", + "gavel": "\uf0e3", + "binoculars": "\uf1e5", + "microphone-slash": "\uf131", + "box-tissue": "\ue05b", + "motorcycle": "\uf21c", + "bell-concierge": "\uf562", + "pen-ruler": "\uf5ae", + "people-arrows": "\ue068", + "mars-and-venus-burst": "\ue523", + "square-caret-right": "\uf152", + "scissors": "\uf0c4", + "sun-plant-wilt": "\ue57a", + "toilets-portable": "\ue584", + "hockey-puck": "\uf453", + "table": "\uf0ce", + "magnifying-glass-arrow-right": "\ue521", + "tachograph-digital": "\uf566", + "users-slash": "\ue073", + "clover": "\ue139", + "reply": "\uf3e5", + "star-and-crescent": "\uf699", + "house-fire": "\ue50c", + "square-minus": "\uf146", + "helicopter": "\uf533", + "compass": "\uf14e", + "square-caret-down": "\uf150", + "file-circle-question": "\ue4ef", + "laptop-code": "\uf5fc", + "swatchbook": "\uf5c3", + "prescription-bottle": "\uf485", + "bars": "\uf0c9", + "people-group": "\ue533", + "hourglass-end": "\uf253", + "heart-crack": "\uf7a9", + "square-up-right": "\uf360", + "face-kiss-beam": "\uf597", + "film": "\uf008", + "ruler-horizontal": "\uf547", + "people-robbery": "\ue536", + "lightbulb": "\uf0eb", + "caret-left": "\uf0d9", + "circle-exclamation": "\uf06a", + "school-circle-xmark": "\ue56d", + "arrow-right-from-bracket": "\uf08b", + "circle-chevron-down": "\uf13a", + "unlock-keyhole": "\uf13e", + "cloud-showers-heavy": "\uf740", + "headphones-simple": "\uf58f", + "sitemap": "\uf0e8", + "circle-dollar-to-slot": "\uf4b9", + "memory": "\uf538", + "road-spikes": "\ue568", + "fire-burner": "\ue4f1", + "flag": "\uf024", + "hanukiah": "\uf6e6", + "feather": "\uf52d", + "volume-low": "\uf027", + "comment-slash": "\uf4b3", + "cloud-sun-rain": "\uf743", + "compress": "\uf066", + "wheat-awn": "\ue2cd", + "ankh": "\uf644", + "hands-holding-child": "\ue4fa", + "asterisk": "\u002a", + "square-check": "\uf14a", + "peseta-sign": "\ue221", + "heading": "\uf1dc", + "ghost": "\uf6e2", + "list": "\uf03a", + "square-phone-flip": "\uf87b", + "cart-plus": "\uf217", + "gamepad": "\uf11b", + "circle-dot": "\uf192", + "face-dizzy": "\uf567", + "egg": "\uf7fb", + "house-medical-circle-xmark": "\ue513", + "campground": "\uf6bb", + "folder-plus": "\uf65e", + "futbol": "\uf1e3", + "paintbrush": "\uf1fc", + "lock": "\uf023", + "gas-pump": "\uf52f", + "hot-tub-person": "\uf593", + "map-location": "\uf59f", + "house-flood-water": "\ue50e", + "tree": "\uf1bb", + "bridge-lock": "\ue4cc", + "sack-dollar": "\uf81d", + "pen-to-square": "\uf044", + "car-side": "\uf5e4", + "share-nodes": "\uf1e0", + "heart-circle-minus": "\ue4ff", + "hourglass-half": "\uf252", + "microscope": "\uf610", + "sink": "\ue06d", + "bag-shopping": "\uf290", + "arrow-down-z-a": "\uf881", + "mitten": "\uf7b5", + "person-rays": "\ue54d", + "users": "\uf0c0", + "eye-slash": "\uf070", + "flask-vial": "\ue4f3", + "hand": "\uf256", + "om": "\uf679", + "worm": "\ue599", + "house-circle-xmark": "\ue50b", + "plug": "\uf1e6", + "chevron-up": "\uf077", + "hand-spock": "\uf259", + "stopwatch": "\uf2f2", + "face-kiss": "\uf596", + "bridge-circle-xmark": "\ue4cb", + "face-grin-tongue": "\uf589", + "chess-bishop": "\uf43a", + "face-grin-wink": "\uf58c", + "ear-deaf": "\uf2a4", + "road-circle-check": "\ue564", + "dice-five": "\uf523", + "square-rss": "\uf143", + "land-mine-on": "\ue51b", + "i-cursor": "\uf246", + "stamp": "\uf5bf", + "stairs": "\ue289", + "i": "\u0049", + "hryvnia-sign": "\uf6f2", + "pills": "\uf484", + "face-grin-wide": "\uf581", + "tooth": "\uf5c9", + "v": "\u0056", + "bangladeshi-taka-sign": "\ue2e6", + "bicycle": "\uf206", + "staff-snake": "\ue579", + "head-side-cough-slash": "\ue062", + "truck-medical": "\uf0f9", + "wheat-awn-circle-exclamation": "\ue598", + "snowman": "\uf7d0", + "mortar-pestle": "\uf5a7", + "road-barrier": "\ue562", + "school": "\uf549", + "igloo": "\uf7ae", + "joint": "\uf595", + "angle-right": "\uf105", + "horse": "\uf6f0", + "q": "\u0051", + "g": "\u0047", + "notes-medical": "\uf481", + "temperature-half": "\uf2c9", + "dong-sign": "\ue169", + "capsules": "\uf46b", + "poo-storm": "\uf75a", + "face-frown-open": "\uf57a", + "hand-point-up": "\uf0a6", + "money-bill": "\uf0d6", + "bookmark": "\uf02e", + "align-justify": "\uf039", + "umbrella-beach": "\uf5ca", + "helmet-un": "\ue503", + "bullseye": "\uf140", + "bacon": "\uf7e5", + "hand-point-down": "\uf0a7", + "arrow-up-from-bracket": "\ue09a", + "folder": "\uf07b", + "file-waveform": "\uf478", + "radiation": "\uf7b9", + "chart-simple": "\ue473", + "mars-stroke": "\uf229", + "vial": "\uf492", + "gauge": "\uf624", + "wand-magic-sparkles": "\ue2ca", + "e": "\u0045", + "pen-clip": "\uf305", + "bridge-circle-exclamation": "\ue4ca", + "user": "\uf007", + "school-circle-check": "\ue56b", + "dumpster": "\uf793", + "van-shuttle": "\uf5b6", + "building-user": "\ue4da", + "square-caret-left": "\uf191", + "highlighter": "\uf591", + "key": "\uf084", + "bullhorn": "\uf0a1", + "globe": "\uf0ac", + "synagogue": "\uf69b", + "person-half-dress": "\ue548", + "road-bridge": "\ue563", + "location-arrow": "\uf124", + "c": "\u0043", + "tablet-button": "\uf10a", + "building-lock": "\ue4d6", + "pizza-slice": "\uf818", + "money-bill-wave": "\uf53a", + "chart-area": "\uf1fe", + "house-flag": "\ue50d", + "person-circle-minus": "\ue540", + "ban": "\uf05e", + "camera-rotate": "\ue0d8", + "spray-can-sparkles": "\uf5d0", + "star": "\uf005", + "repeat": "\uf363", + "cross": "\uf654", + "box": "\uf466", + "venus-mars": "\uf228", + "arrow-pointer": "\uf245", + "maximize": "\uf31e", + "charging-station": "\uf5e7", + "shapes": "\uf61f", + "shuffle": "\uf074", + "person-running": "\uf70c", + "mobile-retro": "\ue527", + "grip-lines-vertical": "\uf7a5", + "spider": "\uf717", + "hands-bound": "\ue4f9", + "file-invoice-dollar": "\uf571", + "plane-circle-exclamation": "\ue556", + "x-ray": "\uf497", + "spell-check": "\uf891", + "slash": "\uf715", + "computer-mouse": "\uf8cc", + "arrow-right-to-bracket": "\uf090", + "shop-slash": "\ue070", + "server": "\uf233", + "virus-covid-slash": "\ue4a9", + "shop-lock": "\ue4a5", + "hourglass-start": "\uf251", + "blender-phone": "\uf6b6", + "building-wheat": "\ue4db", + "person-breastfeeding": "\ue53a", + "right-to-bracket": "\uf2f6", + "venus": "\uf221", + "passport": "\uf5ab", + "heart-pulse": "\uf21e", + "people-carry-box": "\uf4ce", + "temperature-high": "\uf769", + "microchip": "\uf2db", + "crown": "\uf521", + "weight-hanging": "\uf5cd", + "xmarks-lines": "\ue59a", + "file-prescription": "\uf572", + "weight-scale": "\uf496", + "user-group": "\uf500", + "arrow-up-a-z": "\uf15e", + "chess-knight": "\uf441", + "face-laugh-squint": "\uf59b", + "wheelchair": "\uf193", + "circle-arrow-up": "\uf0aa", + "toggle-on": "\uf205", + "person-walking": "\uf554", + "l": "\u004c", + "fire": "\uf06d", + "bed-pulse": "\uf487", + "shuttle-space": "\uf197", + "face-laugh": "\uf599", + "folder-open": "\uf07c", + "heart-circle-plus": "\ue500", + "code-fork": "\ue13b", + "city": "\uf64f", + "microphone-lines": "\uf3c9", + "pepper-hot": "\uf816", + "unlock": "\uf09c", + "colon-sign": "\ue140", + "headset": "\uf590", + "store-slash": "\ue071", + "road-circle-xmark": "\ue566", + "user-minus": "\uf503", + "mars-stroke-up": "\uf22a", + "champagne-glasses": "\uf79f", + "clipboard": "\uf328", + "house-circle-exclamation": "\ue50a", + "file-arrow-up": "\uf574", + "wifi": "\uf1eb", + "bath": "\uf2cd", + "underline": "\uf0cd", + "user-pen": "\uf4ff", + "signature": "\uf5b7", + "stroopwafel": "\uf551", + "bold": "\uf032", + "anchor-lock": "\ue4ad", + "building-ngo": "\ue4d7", + "manat-sign": "\ue1d5", + "not-equal": "\uf53e", + "border-top-left": "\uf853", + "map-location-dot": "\uf5a0", + "jedi": "\uf669", + "square-poll-vertical": "\uf681", + "mug-hot": "\uf7b6", + "car-battery": "\uf5df", + "gift": "\uf06b", + "dice-two": "\uf528", + "chess-queen": "\uf445", + "glasses": "\uf530", + "chess-board": "\uf43c", + "building-circle-check": "\ue4d2", + "person-chalkboard": "\ue53d", + "mars-stroke-right": "\uf22b", + "hand-back-fist": "\uf255", + "square-caret-up": "\uf151", + "cloud-showers-water": "\ue4e4", + "chart-bar": "\uf080", + "hands-bubbles": "\ue05e", + "less-than-equal": "\uf537", + "train": "\uf238", + "eye-low-vision": "\uf2a8", + "crow": "\uf520", + "sailboat": "\ue445", + "window-restore": "\uf2d2", + "square-plus": "\uf0fe", + "torii-gate": "\uf6a1", + "frog": "\uf52e", + "bucket": "\ue4cf", + "image": "\uf03e", + "microphone": "\uf130", + "cow": "\uf6c8", + "caret-up": "\uf0d8", + "screwdriver": "\uf54a", + "folder-closed": "\ue185", + "house-tsunami": "\ue515", + "square-nfi": "\ue576", + "arrow-up-from-ground-water": "\ue4b5", + "martini-glass": "\uf57b", + "rotate-left": "\uf2ea", + "table-columns": "\uf0db", + "lemon": "\uf094", + "head-side-mask": "\ue063", + "handshake": "\uf2b5", + "gem": "\uf3a5", + "dolly": "\uf472", + "smoking": "\uf48d", + "minimize": "\uf78c", + "monument": "\uf5a6", + "snowplow": "\uf7d2", + "angles-right": "\uf101", + "cannabis": "\uf55f", + "circle-play": "\uf144", + "tablets": "\uf490", + "ethernet": "\uf796", + "euro-sign": "\uf153", + "chair": "\uf6c0", + "circle-check": "\uf058", + "circle-stop": "\uf28d", + "compass-drafting": "\uf568", + "plate-wheat": "\ue55a", + "icicles": "\uf7ad", + "person-shelter": "\ue54f", + "neuter": "\uf22c", + "id-badge": "\uf2c1", + "marker": "\uf5a1", + "face-laugh-beam": "\uf59a", + "helicopter-symbol": "\ue502", + "universal-access": "\uf29a", + "circle-chevron-up": "\uf139", + "lari-sign": "\ue1c8", + "volcano": "\uf770", + "person-walking-dashed-line-arrow-right": "\ue553", + "sterling-sign": "\uf154", + "viruses": "\ue076", + "square-person-confined": "\ue577", + "user-tie": "\uf508", + "arrow-down-long": "\uf175", + "tent-arrow-down-to-line": "\ue57e", + "certificate": "\uf0a3", + "reply-all": "\uf122", + "suitcase": "\uf0f2", + "person-skating": "\uf7c5", + "filter-circle-dollar": "\uf662", + "camera-retro": "\uf083", + "circle-arrow-down": "\uf0ab", + "file-import": "\uf56f", + "square-arrow-up-right": "\uf14c", + "box-open": "\uf49e", + "scroll": "\uf70e", + "spa": "\uf5bb", + "location-pin-lock": "\ue51f", + "pause": "\uf04c", + "hill-avalanche": "\ue507", + "temperature-empty": "\uf2cb", + "bomb": "\uf1e2", + "registered": "\uf25d", + "address-card": "\uf2bb", + "scale-unbalanced-flip": "\uf516", + "subscript": "\uf12c", + "diamond-turn-right": "\uf5eb", + "burst": "\ue4dc", + "house-laptop": "\ue066", + "face-tired": "\uf5c8", + "money-bills": "\ue1f3", + "smog": "\uf75f", + "crutch": "\uf7f7", + "font-awesome": "\uf2b4", + "cloud-arrow-up": "\uf0ee", + "palette": "\uf53f", + "arrows-turn-right": "\ue4c0", + "vest": "\ue085", + "ferry": "\ue4ea", + "arrows-down-to-people": "\ue4b9", + "seedling": "\uf4d8", + "left-right": "\uf337", + "boxes-packing": "\ue4c7", + "circle-arrow-left": "\uf0a8", + "group-arrows-rotate": "\ue4f6", + "bowl-food": "\ue4c6", + "candy-cane": "\uf786", + "arrow-down-wide-short": "\uf160", + "cloud-bolt": "\uf76c", + "text-slash": "\uf87d", + "face-smile-wink": "\uf4da", + "file-word": "\uf1c2", + "file-powerpoint": "\uf1c4", + "arrows-left-right": "\uf07e", + "house-lock": "\ue510", + "cloud-arrow-down": "\uf0ed", + "children": "\ue4e1", + "chalkboard": "\uf51b", + "user-large-slash": "\uf4fa", + "envelope-open": "\uf2b6", + "handshake-simple-slash": "\ue05f", + "mattress-pillow": "\ue525", + "guarani-sign": "\ue19a", + "arrows-rotate": "\uf021", + "fire-extinguisher": "\uf134", + "cruzeiro-sign": "\ue152", + "greater-than-equal": "\uf532", + "shield-halved": "\uf3ed", + "book-atlas": "\uf558", + "virus": "\ue074", + "envelope-circle-check": "\ue4e8", + "layer-group": "\uf5fd", + "arrows-to-dot": "\ue4be", + "archway": "\uf557", + "heart-circle-check": "\ue4fd", + "house-chimney-crack": "\uf6f1", + "file-zipper": "\uf1c6", + "square": "\uf0c8", + "martini-glass-empty": "\uf000", + "couch": "\uf4b8", + "cedi-sign": "\ue0df", + "italic": "\uf033", + "church": "\uf51d", + "comments-dollar": "\uf653", + "democrat": "\uf747", + "z": "\u005a", + "person-skiing": "\uf7c9", + "road-lock": "\ue567", + "a": "\u0041", + "temperature-arrow-down": "\ue03f", + "feather-pointed": "\uf56b", + "p": "\u0050", + "snowflake": "\uf2dc", + "newspaper": "\uf1ea", + "rectangle-ad": "\uf641", + "circle-arrow-right": "\uf0a9", + "filter-circle-xmark": "\ue17b", + "locust": "\ue520", + "sort": "\uf0dc", + "list-ol": "\uf0cb", + "person-dress-burst": "\ue544", + "money-check-dollar": "\uf53d", + "vector-square": "\uf5cb", + "bread-slice": "\uf7ec", + "language": "\uf1ab", + "face-kiss-wink-heart": "\uf598", + "filter": "\uf0b0", + "question": "\u003f", + "file-signature": "\uf573", + "up-down-left-right": "\uf0b2", + "house-chimney-user": "\ue065", + "hand-holding-heart": "\uf4be", + "puzzle-piece": "\uf12e", + "money-check": "\uf53c", + "star-half-stroke": "\uf5c0", + "code": "\uf121", + "whiskey-glass": "\uf7a0", + "building-circle-exclamation": "\ue4d3", + "magnifying-glass-chart": "\ue522", + "arrow-up-right-from-square": "\uf08e", + "cubes-stacked": "\ue4e6", + "won-sign": "\uf159", + "virus-covid": "\ue4a8", + "austral-sign": "\ue0a9", + "f": "\u0046", + "leaf": "\uf06c", + "road": "\uf018", + "taxi": "\uf1ba", + "person-circle-plus": "\ue541", + "chart-pie": "\uf200", + "bolt-lightning": "\ue0b7", + "sack-xmark": "\ue56a", + "file-excel": "\uf1c3", + "file-contract": "\uf56c", + "fish-fins": "\ue4f2", + "building-flag": "\ue4d5", + "face-grin-beam": "\uf582", + "object-ungroup": "\uf248", + "poop": "\uf619", + "location-pin": "\uf041", + "kaaba": "\uf66b", + "toilet-paper": "\uf71e", + "helmet-safety": "\uf807", + "eject": "\uf052", + "circle-right": "\uf35a", + "plane-circle-check": "\ue555", + "face-rolling-eyes": "\uf5a5", + "object-group": "\uf247", + "chart-line": "\uf201", + "mask-ventilator": "\ue524", + "arrow-right": "\uf061", + "signs-post": "\uf277", + "cash-register": "\uf788", + "person-circle-question": "\ue542", + "h": "\u0048", + "tarp": "\ue57b", + "screwdriver-wrench": "\uf7d9", + "arrows-to-eye": "\ue4bf", + "plug-circle-bolt": "\ue55b", + "heart": "\uf004", + "mars-and-venus": "\uf224", + "house-user": "\ue1b0", + "dumpster-fire": "\uf794", + "house-crack": "\ue3b1", + "martini-glass-citrus": "\uf561", + "face-surprise": "\uf5c2", + "bottle-water": "\ue4c5", + "circle-pause": "\uf28b", + "toilet-paper-slash": "\ue072", + "apple-whole": "\uf5d1", + "kitchen-set": "\ue51a", + "r": "\u0052", + "temperature-quarter": "\uf2ca", + "cube": "\uf1b2", + "bitcoin-sign": "\ue0b4", + "shield-dog": "\ue573", + "solar-panel": "\uf5ba", + "lock-open": "\uf3c1", + "elevator": "\ue16d", + "money-bill-transfer": "\ue528", + "money-bill-trend-up": "\ue529", + "house-flood-water-circle-arrow-right": "\ue50f", + "square-poll-horizontal": "\uf682", + "circle": "\uf111", + "backward-fast": "\uf049", + "recycle": "\uf1b8", + "user-astronaut": "\uf4fb", + "plane-slash": "\ue069", + "trademark": "\uf25c", + "basketball": "\uf434", + "satellite-dish": "\uf7c0", + "circle-up": "\uf35b", + "mobile-screen-button": "\uf3cd", + "volume-high": "\uf028", + "users-rays": "\ue593", + "wallet": "\uf555", + "clipboard-check": "\uf46c", + "file-audio": "\uf1c7", + "burger": "\uf805", + "wrench": "\uf0ad", + "bugs": "\ue4d0", + "rupee-sign": "\uf156", + "file-image": "\uf1c5", + "circle-question": "\uf059", + "plane-departure": "\uf5b0", + "handshake-slash": "\ue060", + "book-bookmark": "\ue0bb", + "code-branch": "\uf126", + "hat-cowboy": "\uf8c0", + "bridge": "\ue4c8", + "phone-flip": "\uf879", + "truck-front": "\ue2b7", + "cat": "\uf6be", + "anchor-circle-exclamation": "\ue4ab", + "truck-field": "\ue58d", + "route": "\uf4d7", + "clipboard-question": "\ue4e3", + "panorama": "\ue209", + "comment-medical": "\uf7f5", + "teeth-open": "\uf62f", + "file-circle-minus": "\ue4ed", + "tags": "\uf02c", + "wine-glass": "\uf4e3", + "forward-fast": "\uf050", + "face-meh-blank": "\uf5a4", + "square-parking": "\uf540", + "house-signal": "\ue012", + "bars-progress": "\uf828", + "faucet-drip": "\ue006", + "cart-flatbed": "\uf474", + "ban-smoking": "\uf54d", + "terminal": "\uf120", + "mobile-button": "\uf10b", + "house-medical-flag": "\ue514", + "basket-shopping": "\uf291", + "tape": "\uf4db", + "bus-simple": "\uf55e", + "eye": "\uf06e", + "face-sad-cry": "\uf5b3", + "audio-description": "\uf29e", + "person-military-to-person": "\ue54c", + "file-shield": "\ue4f0", + "user-slash": "\uf506", + "pen": "\uf304", + "tower-observation": "\ue586", + "file-code": "\uf1c9", + "signal": "\uf012", + "bus": "\uf207", + "heart-circle-xmark": "\ue501", + "house-chimney": "\ue3af", + "window-maximize": "\uf2d0", + "face-frown": "\uf119", + "prescription": "\uf5b1", + "shop": "\uf54f", + "floppy-disk": "\uf0c7", + "vihara": "\uf6a7", + "scale-unbalanced": "\uf515", + "sort-up": "\uf0de", + "comment-dots": "\uf4ad", + "plant-wilt": "\ue5aa", + "diamond": "\uf219", + "face-grin-squint": "\uf585", + "hand-holding-dollar": "\uf4c0", + "bacterium": "\ue05a", + "hand-pointer": "\uf25a", + "drum-steelpan": "\uf56a", + "hand-scissors": "\uf257", + "hands-praying": "\uf684", + "arrow-rotate-right": "\uf01e", + "biohazard": "\uf780", + "location-crosshairs": "\uf601", + "mars-double": "\uf227", + "child-dress": "\ue59c", + "users-between-lines": "\ue591", + "lungs-virus": "\ue067", + "face-grin-tears": "\uf588", + "phone": "\uf095", + "calendar-xmark": "\uf273", + "child-reaching": "\ue59d", + "head-side-virus": "\ue064", + "user-gear": "\uf4fe", + "arrow-up-1-9": "\uf163", + "door-closed": "\uf52a", + "shield-virus": "\ue06c", + "dice-six": "\uf526", + "mosquito-net": "\ue52c", + "bridge-water": "\ue4ce", + "person-booth": "\uf756", + "text-width": "\uf035", + "hat-wizard": "\uf6e8", + "pen-fancy": "\uf5ac", + "person-digging": "\uf85e", + "trash": "\uf1f8", + "gauge-simple": "\uf629", + "book-medical": "\uf7e6", + "poo": "\uf2fe", + "quote-right": "\uf10e", + "shirt": "\uf553", + "cubes": "\uf1b3", + "divide": "\uf529", + "tenge-sign": "\uf7d7", + "headphones": "\uf025", + "hands-holding": "\uf4c2", + "hands-clapping": "\ue1a8", + "republican": "\uf75e", + "arrow-left": "\uf060", + "person-circle-xmark": "\ue543", + "ruler": "\uf545", + "align-left": "\uf036", + "dice-d6": "\uf6d1", + "restroom": "\uf7bd", + "j": "\u004a", + "users-viewfinder": "\ue595", + "file-video": "\uf1c8", + "up-right-from-square": "\uf35d", + "table-cells": "\uf00a", + "file-pdf": "\uf1c1", + "book-bible": "\uf647", + "o": "\u004f", + "suitcase-medical": "\uf0fa", + "user-secret": "\uf21b", + "otter": "\uf700", + "person-dress": "\uf182", + "comment-dollar": "\uf651", + "business-time": "\uf64a", + "table-cells-large": "\uf009", + "book-tanakh": "\uf827", + "phone-volume": "\uf2a0", + "hat-cowboy-side": "\uf8c1", + "clipboard-user": "\uf7f3", + "child": "\uf1ae", + "lira-sign": "\uf195", + "satellite": "\uf7bf", + "plane-lock": "\ue558", + "tag": "\uf02b", + "comment": "\uf075", + "cake-candles": "\uf1fd", + "envelope": "\uf0e0", + "angles-up": "\uf102", + "paperclip": "\uf0c6", + "arrow-right-to-city": "\ue4b3", + "ribbon": "\uf4d6", + "lungs": "\uf604", + "arrow-up-9-1": "\uf887", + "litecoin-sign": "\ue1d3", + "border-none": "\uf850", + "circle-nodes": "\ue4e2", + "parachute-box": "\uf4cd", + "indent": "\uf03c", + "truck-field-un": "\ue58e", + "hourglass": "\uf254", + "mountain": "\uf6fc", + "user-doctor": "\uf0f0", + "circle-info": "\uf05a", + "cloud-meatball": "\uf73b", + "camera": "\uf030", + "square-virus": "\ue578", + "meteor": "\uf753", + "car-on": "\ue4dd", + "sleigh": "\uf7cc", + "arrow-down-1-9": "\uf162", + "hand-holding-droplet": "\uf4c1", + "water": "\uf773", + "calendar-check": "\uf274", + "braille": "\uf2a1", + "prescription-bottle-medical": "\uf486", + "landmark": "\uf66f", + "truck": "\uf0d1", + "crosshairs": "\uf05b", + "person-cane": "\ue53c", + "tent": "\ue57d", + "vest-patches": "\ue086", + "check-double": "\uf560", + "arrow-down-a-z": "\uf15d", + "money-bill-wheat": "\ue52a", + "cookie": "\uf563", + "arrow-rotate-left": "\uf0e2", + "hard-drive": "\uf0a0", + "face-grin-squint-tears": "\uf586", + "dumbbell": "\uf44b", + "rectangle-list": "\uf022", + "tarp-droplet": "\ue57c", + "house-medical-circle-check": "\ue511", + "person-skiing-nordic": "\uf7ca", + "calendar-plus": "\uf271", + "plane-arrival": "\uf5af", + "circle-left": "\uf359", + "train-subway": "\uf239", + "chart-gantt": "\ue0e4", + "indian-rupee-sign": "\ue1bc", + "crop-simple": "\uf565", + "money-bill-1": "\uf3d1", + "left-long": "\uf30a", + "dna": "\uf471", + "virus-slash": "\ue075", + "minus": "\uf068", + "chess": "\uf439", + "arrow-left-long": "\uf177", + "plug-circle-check": "\ue55c", + "street-view": "\uf21d", + "franc-sign": "\ue18f", + "volume-off": "\uf026", + "hands-asl-interpreting": "\uf2a3", + "gear": "\uf013", + "droplet-slash": "\uf5c7", + "mosque": "\uf678", + "mosquito": "\ue52b", + "star-of-david": "\uf69a", + "person-military-rifle": "\ue54b", + "cart-shopping": "\uf07a", + "vials": "\uf493", + "plug-circle-plus": "\ue55f", + "place-of-worship": "\uf67f", + "grip-vertical": "\uf58e", + "arrow-turn-up": "\uf148", + "u": "\u0055", + "square-root-variable": "\uf698", + "clock": "\uf017", + "backward-step": "\uf048", + "pallet": "\uf482", + "faucet": "\ue005", + "baseball-bat-ball": "\uf432", + "s": "\u0053", + "timeline": "\ue29c", + "keyboard": "\uf11c", + "caret-down": "\uf0d7", + "house-chimney-medical": "\uf7f2", + "temperature-three-quarters": "\uf2c8", + "mobile-screen": "\uf3cf", + "plane-up": "\ue22d", + "piggy-bank": "\uf4d3", + "battery-half": "\uf242", + "mountain-city": "\ue52e", + "coins": "\uf51e", + "khanda": "\uf66d", + "sliders": "\uf1de", + "folder-tree": "\uf802", + "network-wired": "\uf6ff", + "map-pin": "\uf276", + "hamsa": "\uf665", + "cent-sign": "\ue3f5", + "flask": "\uf0c3", + "person-pregnant": "\ue31e", + "wand-sparkles": "\uf72b", + "ellipsis-vertical": "\uf142", + "ticket": "\uf145", + "power-off": "\uf011", + "right-long": "\uf30b", + "flag-usa": "\uf74d", + "laptop-file": "\ue51d", + "tty": "\uf1e4", + "diagram-next": "\ue476", + "person-rifle": "\ue54e", + "house-medical-circle-exclamation": "\ue512", + "closed-captioning": "\uf20a", + "person-hiking": "\uf6ec", + "venus-double": "\uf226", + "images": "\uf302", + "calculator": "\uf1ec", + "people-pulling": "\ue535", + "n": "\u004e", + "cable-car": "\uf7da", + "cloud-rain": "\uf73d", + "building-circle-xmark": "\ue4d4", + "ship": "\uf21a", + "arrows-down-to-line": "\ue4b8", + "download": "\uf019", + "face-grin": "\uf580", + "delete-left": "\uf55a", + "eye-dropper": "\uf1fb", + "file-circle-check": "\ue5a0", + "forward": "\uf04e", + "mobile": "\uf3ce", + "face-meh": "\uf11a", + "align-center": "\uf037", + "book-skull": "\uf6b7", + "id-card": "\uf2c2", + "outdent": "\uf03b", + "heart-circle-exclamation": "\ue4fe", + "house": "\uf015", + "calendar-week": "\uf784", + "laptop-medical": "\uf812", + "b": "\u0042", + "file-medical": "\uf477", + "dice-one": "\uf525", + "kiwi-bird": "\uf535", + "arrow-right-arrow-left": "\uf0ec", + "rotate-right": "\uf2f9", + "utensils": "\uf2e7", + "arrow-up-wide-short": "\uf161", + "mill-sign": "\ue1ed", + "bowl-rice": "\ue2eb", + "skull": "\uf54c", + "tower-broadcast": "\uf519", + "truck-pickup": "\uf63c", + "up-long": "\uf30c", + "stop": "\uf04d", + "code-merge": "\uf387", + "upload": "\uf093", + "hurricane": "\uf751", + "mound": "\ue52d", + "toilet-portable": "\ue583", + "compact-disc": "\uf51f", + "file-arrow-down": "\uf56d", + "caravan": "\uf8ff", + "shield-cat": "\ue572", + "bolt": "\uf0e7", + "glass-water": "\ue4f4", + "oil-well": "\ue532", + "vault": "\ue2c5", + "mars": "\uf222", + "toilet": "\uf7d8", + "plane-circle-xmark": "\ue557", + "yen-sign": "\uf157", + "ruble-sign": "\uf158", + "sun": "\uf185", + "guitar": "\uf7a6", + "face-laugh-wink": "\uf59c", + "horse-head": "\uf7ab", + "bore-hole": "\ue4c3", + "industry": "\uf275", + "circle-down": "\uf358", + "arrows-turn-to-dots": "\ue4c1", + "florin-sign": "\ue184", + "arrow-down-short-wide": "\uf884", + "less-than": "\u003c", + "angle-down": "\uf107", + "car-tunnel": "\ue4de", + "head-side-cough": "\ue061", + "grip-lines": "\uf7a4", + "thumbs-down": "\uf165", + "user-lock": "\uf502", + "arrow-right-long": "\uf178", + "anchor-circle-xmark": "\ue4ac", + "ellipsis": "\uf141", + "chess-pawn": "\uf443", + "kit-medical": "\uf479", + "person-through-window": "\ue5a9", + "toolbox": "\uf552", + "hands-holding-circle": "\ue4fb", + "bug": "\uf188", + "credit-card": "\uf09d", + "car": "\uf1b9", + "hand-holding-hand": "\ue4f7", + "book-open-reader": "\uf5da", + "mountain-sun": "\ue52f", + "arrows-left-right-to-line": "\ue4ba", + "dice-d20": "\uf6cf", + "truck-droplet": "\ue58c", + "file-circle-xmark": "\ue5a1", + "temperature-arrow-up": "\ue040", + "medal": "\uf5a2", + "bed": "\uf236", + "square-h": "\uf0fd", + "podcast": "\uf2ce", + "temperature-full": "\uf2c7", + "bell": "\uf0f3", + "superscript": "\uf12b", + "plug-circle-xmark": "\ue560", + "star-of-life": "\uf621", + "phone-slash": "\uf3dd", + "paint-roller": "\uf5aa", + "handshake-angle": "\uf4c4", + "location-dot": "\uf3c5", + "file": "\uf15b", + "greater-than": "\u003e", + "person-swimming": "\uf5c4", + "arrow-down": "\uf063", + "droplet": "\uf043", + "eraser": "\uf12d", + "earth-americas": "\uf57d", + "person-burst": "\ue53b", + "dove": "\uf4ba", + "battery-empty": "\uf244", + "socks": "\uf696", + "inbox": "\uf01c", + "section": "\ue447", + "gauge-high": "\uf625", + "envelope-open-text": "\uf658", + "hospital": "\uf0f8", + "wine-bottle": "\uf72f", + "chess-rook": "\uf447", + "bars-staggered": "\uf550", + "dharmachakra": "\uf655", + "hotdog": "\uf80f", + "person-walking-with-cane": "\uf29d", + "drum": "\uf569", + "ice-cream": "\uf810", + "heart-circle-bolt": "\ue4fc", + "fax": "\uf1ac", + "paragraph": "\uf1dd", + "check-to-slot": "\uf772", + "star-half": "\uf089", + "boxes-stacked": "\uf468", + "link": "\uf0c1", + "ear-listen": "\uf2a2", + "tree-city": "\ue587", + "play": "\uf04b", + "font": "\uf031", + "rupiah-sign": "\ue23d", + "magnifying-glass": "\uf002", + "table-tennis-paddle-ball": "\uf45d", + "person-dots-from-line": "\uf470", + "trash-can-arrow-up": "\uf82a", + "naira-sign": "\ue1f6", + "cart-arrow-down": "\uf218", + "walkie-talkie": "\uf8ef", + "file-pen": "\uf31c", + "receipt": "\uf543", + "square-pen": "\uf14b", + "suitcase-rolling": "\uf5c1", + "person-circle-exclamation": "\ue53f", + "chevron-down": "\uf078", + "battery-full": "\uf240", + "skull-crossbones": "\uf714", + "code-compare": "\ue13a", + "list-ul": "\uf0ca", + "school-lock": "\ue56f", + "tower-cell": "\ue585", + "down-long": "\uf309", + "ranking-star": "\ue561", + "chess-king": "\uf43f", + "person-harassing": "\ue549", + "brazilian-real-sign": "\ue46c", + "landmark-dome": "\uf752", + "arrow-up": "\uf062", + "tv": "\uf26c", + "shrimp": "\ue448", + "list-check": "\uf0ae", + "jug-detergent": "\ue519", + "circle-user": "\uf2bd", + "user-shield": "\uf505", + "wind": "\uf72e", + "car-burst": "\uf5e1", + "y": "\u0059", + "person-snowboarding": "\uf7ce", + "truck-fast": "\uf48b", + "fish": "\uf578", + "user-graduate": "\uf501", + "circle-half-stroke": "\uf042", + "clapperboard": "\ue131", + "circle-radiation": "\uf7ba", + "baseball": "\uf433", + "jet-fighter-up": "\ue518", + "diagram-project": "\uf542", + "copy": "\uf0c5", + "volume-xmark": "\uf6a9", + "hand-sparkles": "\ue05d", + "grip": "\uf58d", + "share-from-square": "\uf14d", + "child-combatant": "\ue4e0", + "gun": "\ue19b", + "square-phone": "\uf098", + "plus": "\u002b", + "expand": "\uf065", + "computer": "\ue4e5", + "xmark": "\uf00d", + "arrows-up-down-left-right": "\uf047", + "chalkboard-user": "\uf51c", + "peso-sign": "\ue222", + "building-shield": "\ue4d8", + "baby": "\uf77c", + "users-line": "\ue592", + "quote-left": "\uf10d", + "tractor": "\uf722", + "trash-arrow-up": "\uf829", + "arrow-down-up-lock": "\ue4b0", + "lines-leaning": "\ue51e", + "ruler-combined": "\uf546", + "copyright": "\uf1f9", + "equals": "\u003d", + "blender": "\uf517", + "teeth": "\uf62e", + "shekel-sign": "\uf20b", + "map": "\uf279", + "rocket": "\uf135", + "photo-film": "\uf87c", + "folder-minus": "\uf65d", + "store": "\uf54e", + "arrow-trend-up": "\ue098", + "plug-circle-minus": "\ue55e", + "sign-hanging": "\uf4d9", + "bezier-curve": "\uf55b", + "bell-slash": "\uf1f6", + "tablet": "\uf3fb", + "school-flag": "\ue56e", + "fill": "\uf575", + "angle-up": "\uf106", + "drumstick-bite": "\uf6d7", + "holly-berry": "\uf7aa", + "chevron-left": "\uf053", + "bacteria": "\ue059", + "hand-lizard": "\uf258", + "notdef": "\ue1fe", + "disease": "\uf7fa", + "briefcase-medical": "\uf469", + "genderless": "\uf22d", + "chevron-right": "\uf054", + "retweet": "\uf079", + "car-rear": "\uf5de", + "pump-soap": "\ue06b", + "video-slash": "\uf4e2", + "battery-quarter": "\uf243", + "radio": "\uf8d7", + "baby-carriage": "\uf77d", + "traffic-light": "\uf637", + "thermometer": "\uf491", + "vr-cardboard": "\uf729", + "hand-middle-finger": "\uf806", + "percent": "\u0025", + "truck-moving": "\uf4df", + "glass-water-droplet": "\ue4f5", + "display": "\ue163", + "face-smile": "\uf118", + "thumbtack": "\uf08d", + "trophy": "\uf091", + "person-praying": "\uf683", + "hammer": "\uf6e3", + "hand-peace": "\uf25b", + "rotate": "\uf2f1", + "spinner": "\uf110", + "robot": "\uf544", + "peace": "\uf67c", + "gears": "\uf085", + "warehouse": "\uf494", + "arrow-up-right-dots": "\ue4b7", + "splotch": "\uf5bc", + "face-grin-hearts": "\uf584", + "dice-four": "\uf524", + "sim-card": "\uf7c4", + "transgender": "\uf225", + "mercury": "\uf223", + "arrow-turn-down": "\uf149", + "person-falling-burst": "\ue547", + "award": "\uf559", + "ticket-simple": "\uf3ff", + "building": "\uf1ad", + "angles-left": "\uf100", + "qrcode": "\uf029", + "clock-rotate-left": "\uf1da", + "face-grin-beam-sweat": "\uf583", + "file-export": "\uf56e", + "shield": "\uf132", + "arrow-up-short-wide": "\uf885", + "house-medical": "\ue3b2", + "golf-ball-tee": "\uf450", + "circle-chevron-left": "\uf137", + "house-chimney-window": "\ue00d", + "pen-nib": "\uf5ad", + "tent-arrow-turn-left": "\ue580", + "tents": "\ue582", + "wand-magic": "\uf0d0", + "dog": "\uf6d3", + "carrot": "\uf787", + "moon": "\uf186", + "wine-glass-empty": "\uf5ce", + "cheese": "\uf7ef", + "yin-yang": "\uf6ad", + "music": "\uf001", + "code-commit": "\uf386", + "temperature-low": "\uf76b", + "person-biking": "\uf84a", + "broom": "\uf51a", + "shield-heart": "\ue574", + "gopuram": "\uf664", + "earth-oceania": "\ue47b", + "square-xmark": "\uf2d3", + "hashtag": "\u0023", + "up-right-and-down-left-from-center": "\uf424", + "oil-can": "\uf613", + "t": "\u0054", + "hippo": "\uf6ed", + "chart-column": "\ue0e3", + "infinity": "\uf534", + "vial-circle-check": "\ue596", + "person-arrow-down-to-line": "\ue538", + "voicemail": "\uf897", + "fan": "\uf863", + "person-walking-luggage": "\ue554", + "up-down": "\uf338", + "cloud-moon-rain": "\uf73c", + "calendar": "\uf133", + "trailer": "\ue041", + "bahai": "\uf666", + "sd-card": "\uf7c2", + "dragon": "\uf6d5", + "shoe-prints": "\uf54b", + "circle-plus": "\uf055", + "face-grin-tongue-wink": "\uf58b", + "hand-holding": "\uf4bd", + "plug-circle-exclamation": "\ue55d", + "link-slash": "\uf127", + "clone": "\uf24d", + "person-walking-arrow-loop-left": "\ue551", + "arrow-up-z-a": "\uf882", + "fire-flame-curved": "\uf7e4", + "tornado": "\uf76f", + "file-circle-plus": "\ue494", + "book-quran": "\uf687", + "anchor": "\uf13d", + "border-all": "\uf84c", + "face-angry": "\uf556", + "cookie-bite": "\uf564", + "arrow-trend-down": "\ue097", + "rss": "\uf09e", + "draw-polygon": "\uf5ee", + "scale-balanced": "\uf24e", + "gauge-simple-high": "\uf62a", + "shower": "\uf2cc", + "desktop": "\uf390", + "m": "\u004d", + "table-list": "\uf00b", + "comment-sms": "\uf7cd", + "book": "\uf02d", + "user-plus": "\uf234", + "check": "\uf00c", + "battery-three-quarters": "\uf241", + "house-circle-check": "\ue509", + "angle-left": "\uf104", + "diagram-successor": "\ue47a", + "truck-arrow-right": "\ue58b", + "arrows-split-up-and-left": "\ue4bc", + "hand-fist": "\uf6de", + "cloud-moon": "\uf6c3", + "briefcase": "\uf0b1", + "person-falling": "\ue546", + "image-portrait": "\uf3e0", + "user-tag": "\uf507", + "rug": "\ue569", + "earth-europe": "\uf7a2", + "cart-flatbed-suitcase": "\uf59d", + "rectangle-xmark": "\uf410", + "baht-sign": "\ue0ac", + "book-open": "\uf518", + "book-journal-whills": "\uf66a", + "handcuffs": "\ue4f8", + "triangle-exclamation": "\uf071", + "database": "\uf1c0", + "share": "\uf064", + "bottle-droplet": "\ue4c4", + "mask-face": "\ue1d7", + "hill-rockslide": "\ue508", + "right-left": "\uf362", + "paper-plane": "\uf1d8", + "road-circle-exclamation": "\ue565", + "dungeon": "\uf6d9", + "align-right": "\uf038", + "money-bill-1-wave": "\uf53b", + "life-ring": "\uf1cd", + "hands": "\uf2a7", + "calendar-day": "\uf783", + "water-ladder": "\uf5c5", + "arrows-up-down": "\uf07d", + "face-grimace": "\uf57f", + "wheelchair-move": "\ue2ce", + "turn-down": "\uf3be", + "person-walking-arrow-right": "\ue552", + "square-envelope": "\uf199", + "dice": "\uf522", + "bowling-ball": "\uf436", + "brain": "\uf5dc", + "bandage": "\uf462", + "calendar-minus": "\uf272", + "circle-xmark": "\uf057", + "gifts": "\uf79c", + "hotel": "\uf594", + "earth-asia": "\uf57e", + "id-card-clip": "\uf47f", + "magnifying-glass-plus": "\uf00e", + "thumbs-up": "\uf164", + "user-clock": "\uf4fd", + "hand-dots": "\uf461", + "file-invoice": "\uf570", + "window-minimize": "\uf2d1", + "mug-saucer": "\uf0f4", + "brush": "\uf55d", + "mask": "\uf6fa", + "magnifying-glass-minus": "\uf010", + "ruler-vertical": "\uf548", + "user-large": "\uf406", + "train-tram": "\ue5b4", + "user-nurse": "\uf82f", + "syringe": "\uf48e", + "cloud-sun": "\uf6c4", + "stopwatch-20": "\ue06f", + "square-full": "\uf45c", + "magnet": "\uf076", + "jar": "\ue516", + "note-sticky": "\uf249", + "bug-slash": "\ue490", + "arrow-up-from-water-pump": "\ue4b6", + "bone": "\uf5d7", + "user-injured": "\uf728", + "face-sad-tear": "\uf5b4", + "plane": "\uf072", + "tent-arrows-down": "\ue581", + "exclamation": "\u0021", + "arrows-spin": "\ue4bb", + "print": "\uf02f", + "turkish-lira-sign": "\ue2bb", + "dollar-sign": "\u0024", + "x": "\u0058", + "magnifying-glass-dollar": "\uf688", + "users-gear": "\uf509", + "person-military-pointing": "\ue54a", + "building-columns": "\uf19c", + "umbrella": "\uf0e9", + "trowel": "\ue589", + "d": "\u0044", + "stapler": "\ue5af", + "masks-theater": "\uf630", + "kip-sign": "\ue1c4", + "hand-point-left": "\uf0a5", + "handshake-simple": "\uf4c6", + "jet-fighter": "\uf0fb", + "square-share-nodes": "\uf1e1", + "barcode": "\uf02a", + "plus-minus": "\ue43c", + "video": "\uf03d", + "graduation-cap": "\uf19d", + "hand-holding-medical": "\ue05c", + "person-circle-check": "\ue53e", + "turn-up": "\uf3bf", + }, +} \ No newline at end of file diff --git a/addons/fontawesome/FontAwesome.gd b/addons/fontawesome/FontAwesome.gd new file mode 100644 index 0000000..50631eb --- /dev/null +++ b/addons/fontawesome/FontAwesome.gd @@ -0,0 +1,44 @@ +@tool +extends Label + +@export_category("FontAwesome") +@export_range(1, 16384) var icon_size: int = 16: set = set_icon_size +@export_enum("solid", "regular", "brands") var icon_type: String = "solid": set = set_icon_type +@export var icon_name: String = "circle-question": set = set_icon_name + +const icon_fonts: Dictionary = { + "solid": "res://addons/fontawesome/fonts/fa-solid-900.woff2", + "regular": "res://addons/fontawesome/fonts/fa-regular-400.woff2", + "brands": "res://addons/fontawesome/fonts/fa-brands-400.woff2" +} + +const cheatsheet: Dictionary = preload("res://addons/fontawesome/All.gd").all + +func _init(): + horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + vertical_alignment = VERTICAL_ALIGNMENT_CENTER + # disable some things, this is icon not text + auto_translate = false + localize_numeral_system = false + + set_icon_type(icon_type) + set_icon_size(icon_size) + set_icon_name(icon_name) + +func set_icon_size(new_size: int): + icon_size = clamp(new_size, 1, 16384) + add_theme_font_size_override("font_size", icon_size) + size = Vector2(icon_size, icon_size) + +func set_icon_type(new_type: String): + icon_type = new_type + match icon_type: + "solid", "regular", "brands": + add_theme_font_override("font", load(icon_fonts[icon_type])) + +func set_icon_name(new_name: String): + icon_name = new_name + var iconcode = "" + if icon_name in cheatsheet[icon_type]: + iconcode = cheatsheet[icon_type][icon_name] + set_text(iconcode) diff --git a/addons/simple-state/LICENSE.md b/addons/fontawesome/LICENSE.txt similarity index 96% rename from addons/simple-state/LICENSE.md rename to addons/fontawesome/LICENSE.txt index fbc8e79..01bd21e 100644 --- a/addons/simple-state/LICENSE.md +++ b/addons/fontawesome/LICENSE.txt @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Addons By Aura +Copyright (c) 2023 LetterN Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/addons/fontawesome/flag-solid.svg b/addons/fontawesome/flag-solid.svg new file mode 100644 index 0000000..cd62b8c --- /dev/null +++ b/addons/fontawesome/flag-solid.svg @@ -0,0 +1 @@ + diff --git a/addons/fontawesome/flag-solid.svg.import b/addons/fontawesome/flag-solid.svg.import new file mode 100644 index 0000000..956141a --- /dev/null +++ b/addons/fontawesome/flag-solid.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cdk6bwkag1wre" +path="res://.godot/imported/flag-solid.svg-f443982cac7d006eea43c772e2428bae.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/fontawesome/flag-solid.svg" +dest_files=["res://.godot/imported/flag-solid.svg-f443982cac7d006eea43c772e2428bae.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/addons/fontawesome/fonts/LICENSE.txt b/addons/fontawesome/fonts/LICENSE.txt new file mode 100644 index 0000000..39e18e3 --- /dev/null +++ b/addons/fontawesome/fonts/LICENSE.txt @@ -0,0 +1,165 @@ +Fonticons, Inc. (https://fontawesome.com) + +-------------------------------------------------------------------------------- + +Font Awesome Free License + +Font Awesome Free is free, open source, and GPL friendly. You can use it for +commercial projects, open source projects, or really almost whatever you want. +Full Font Awesome Free license: https://fontawesome.com/license/free. + +-------------------------------------------------------------------------------- + +# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) + +The Font Awesome Free download is licensed under a Creative Commons +Attribution 4.0 International License and applies to all icons packaged +as SVG and JS file types. + +-------------------------------------------------------------------------------- + +# Fonts: SIL OFL 1.1 License + +In the Font Awesome Free download, the SIL OFL license applies to all icons +packaged as web and desktop font files. + +Copyright (c) 2023 Fonticons, Inc. (https://fontawesome.com) +with Reserved Font Name: "Font Awesome". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +SIL OPEN FONT LICENSE +Version 1.1 - 26 February 2007 + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting — in part or in whole — any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +-------------------------------------------------------------------------------- + +# Code: MIT License (https://opensource.org/licenses/MIT) + +In the Font Awesome Free download, the MIT license applies to all non-font and +non-icon files. + +Copyright 2023 Fonticons, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in the +Software without restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-------------------------------------------------------------------------------- + +# Attribution + +Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font +Awesome Free files already contain embedded comments with sufficient +attribution, so you shouldn't need to do anything additional when using these +files normally. + +We've kept attribution comments terse, so we ask that you do not actively work +to remove them from files, especially code. They're a great way for folks to +learn about Font Awesome. + +-------------------------------------------------------------------------------- + +# Brand Icons + +All brand icons are trademarks of their respective owners. The use of these +trademarks does not indicate endorsement of the trademark holder by Font +Awesome, nor vice versa. **Please do not use brand logos for any purpose except +to represent the company, product, or service to which they refer.** diff --git a/addons/fontawesome/fonts/fa-brands-400.woff2 b/addons/fontawesome/fonts/fa-brands-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5929101297278b9c51cfc48d99bdd23636163525 GIT binary patch literal 108000 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 z zVK}Uzl0UP)(5lmMUU27?;-cFX+?we`!d|&j7K%uavrBHYDGM))DQTKzQb9@+d5vQ@ z9u@jcYad2WMz4w96@5_@i79|J3OxixOg7PlaMI*vuX@ey6Ok?V8f4~_!HbKA4S#nI z7PrBwsK64%4IRr?0~>hYrESC$?)JrZ7hh?V(^`NJ4oFF>4F9+=#^+k&RRqDcw$|?D zS&~lDI5xf(SVO7U%V(suN=jv|l=9D|dvAibE&s1GDO~aC=d}=Q@@~eNF_}_IWY#Ik zSdq^rMJc#y9@R;#jb=+7Mo1~FmG6*J8Y_j6*2`}amJ(uSjReik*EAKF z)VNh^uLNVL*}+b`a*J78H|S2Z5{}2o{7(*kWAFL9_o{!|%kuofI)4y{P`&XV+r{NS zYpyzax5V}*d^B~b6dKS`_^0BXg)uj&Vyqr>%TcW_V- zR!2vTB9d8_@%5T#Stf~8b9A&C)CUK<_3H4b>GdxE_t|NcR^2{;QM@L0_ukvze(x@0 zckjLZcdU&QW37#!jWD+M>OsF3$FfQ~M22Z4v%z3=aqr&6XfVj6(##Nbl1j#LuYYiK z<;u~2_GRhcHIzE2jfsV~#+ZiM^y&)A-qTY>Zg3Ty~BWtGJ@#iaKvC0FXd$zk650d~WXtNP(Fm!oewu4!0|dyb>I4JxNbtCg*E zJA5wI){Yms5xK5JWKxSlC*ejINB}7TBq2x$A?+U%F6qiN*wZr0#3HW@^QvOMyfNLe zdhFQNW^nlGVw5pH?oDuYI?b1y2h{0P7cVaUMszx};uz0H#eDkhn>YD`bT-?6=9Vk7 znZ_yCT?xsE5T1*q-2S3c)u?T0U%2+6F5q~48f@aABkLdR9R8nbI7A!{tHtv#d;uR> z-8?&;qEIVgW+IaywT8)n!w|IWRu($4?yCw$T}_@*-T;_;r&v%Q|T2l z0hA*S8K*?Zd}-g`Vf@6Y+iu(2Vf=*9b=wj`uI%saADjGPE`zYQ+-xFn7DsVt+u+y+ zb6saCPLfb4mBa{~hjAQOHoA@k$2K=l-+J5L5yp?7y6v_-scD+zf(8_$X!Zxo($E3o zIM+SbHHDDUbp;1t%wLJ51fa|hmMqt^EzYHMe8vGNwFn^u3Az4x_!+oH`s5TLBb8@d z#ZzP=MB_c!i#HRM5S{Ji*Qfx`7iTk;@M-$&Iv~?*yhTq58nh?i0=lrq|=Q;l{ z=K~?Xh{!)J#Or?>0r>X_vGTo~=R$~zbI$J(;w%@R|Ht;Lddc|g z%}ew^zR6lb6wM}UZLr?u;hf-|jR39SY;`8~^%I68=oH}La?uVZ%U(NK+7+dtNhLH_ zkxn2tYMWg_e=Ob9C&a}T^$1x9?4inYQmfMS2!JOidh+DP-4<6^x@#ufYngmZtWRUT zSZ<9Nvfg|@S^-i31P%hsC?&A1MT7(q4_iz#0rGVdSvH8vGE2E~antSQIcun!cHB5*?uiu8MYM%r>isYG!O#K8v;cS1N9h`X3GK!9=ozn=C)oCj+Kd1?x+ zgBF{epK}!m&M^>CrqUz?FfbDnbeR0Bu!d7j#`%5x2+D7esC2+BN*Xj28o2wG}i36psu#Xz13LAPgwm}FWn zJCCg@Ev2=?5PNW`74MuInORC?B@s8VATrFbMViozNSbjJq2ELP2l>mE2u+p9LuH6n zvs&*Gb_dNJQoDB7HjlwMnpUDZ#~7+f(BOAPuf6(ArY&@w?j~` zt^Lyc{a-nM;_dVN)n9V;ttOkfE|*@Hod};*Bzl6rRjmG0=^F(_IltBJhy?^$Tg2enwBlkZ2_`o% zqs_G)L`lWb{ZOWe__Nb~4>=5ni}k)&tGCm|aEQR6-=DQ>HLt(E1Y7_rO9;v}4J6Za z#xOC3U`#iFF)+_pzF$=x#7=cv2bv9Z&aQUAabUFr%?3JWS3BT1Fwk{dARg5m+a3rX5dVHZNDB#i2$l|OiV_P^`!Emb|lR+3>D z&S$q*R^)vkP6~MP3cOEbqs3yB2{ssP!BxX>=4wCu4mKEUMKd%�%hK&BfNrio72I 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 kjEE?V+uJ$<`TCdU^Sk%go@eVUOm0FFQr7ytkO literal 0 HcmV?d00001 diff --git a/addons/fontawesome/fonts/fa-brands-400.woff2.import b/addons/fontawesome/fonts/fa-brands-400.woff2.import new file mode 100644 index 0000000..38b172a --- /dev/null +++ b/addons/fontawesome/fonts/fa-brands-400.woff2.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://clt4puu367e82" +path="res://.godot/imported/fa-brands-400.woff2-01946f939132baa0e37dbdeac9412933.fontdata" + +[deps] + +source_file="res://addons/fontawesome/fonts/fa-brands-400.woff2" +dest_files=["res://.godot/imported/fa-brands-400.woff2-01946f939132baa0e37dbdeac9412933.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/addons/fontawesome/fonts/fa-regular-400.woff2 b/addons/fontawesome/fonts/fa-regular-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..953d5540b0d2ce898362bdbdd2c53570b3bd7acc GIT binary patch literal 24840 zcmV)$K#sq6Pew8T0RR910AUCK3IG5A0PbV}0ARiY0|5X400000000000000000000 z00001I07UDAO>IqhEM>n0Lp`zWXppr1&9a-AcZk^RUtj8#XUq+)OuJ%YEln?s#Xbc zci5}q*B^iV^WR?t#!Y;z^L+F0{C98PIyVhDNmT<#n`yyM#@CyfjO1NUBnW9*mAr6Z zm>dFv+LHe{|359Y{@qtq?-jmR_+En=t5wyqpsO0H1d-iI?AVF3iR{2AFcS@(ab~g; z?VyJ>>|texAR72tFMBzQ=_U3OYl*Y)z1;r4ciLCoLRCpBsbqm2JF#QMQmDISRFbB2 zzexk;aX04?_sjzt$Pj0V^9G^!o!PJ5lO@g)z?XAmSJk)|$WmBIi z1U3H3<`tjD>WtHeSnv-7`)_tvzHyzdN>Qb+VwG9Vf0Qt#XjCOw1mO$mSQw`AzG`M7 zsNO})+@7)b>+B)-9`&zxf!Rat?hBzT-g>ZjmzmpFV&{cW7I<^Y#8yt!n-(_@NA4$&U%$b z0xI{ZGA7J`SRIM7vgE(J z8vJZs)3NVpSo#kD)BXOFudaN=eO6OCpK4G~lDp)MNHw3;P&$umB*}~ZB=o|c)G9YZ z)3Yq)l53^!ryJEK%}HA^-94{&w09{bwaW?}J~b;pW@7c?xoUL(?6Y>Xry5o5YJfB< zJ%(q3exZ%R9P?C?}ZPdD!o@%j&5`vjdXr<%X#j+sw6*- ztd4F;z8B2@qL*_@mA0{{g)&qiUvH?gkyoftra{>MvbI*eW~A>V>iUlED)lkSN*ipn z$!1$@was=r?6k{nd+fE(eg_ zoQ=v>W~;K**_v!^wl3R}J)J$1eJ-z^*UuZ~jq*YHlzdvgIA4-4&8zdx`E7kV_UY88 zqR)aqUiQaNqbzDiov0hFqD{1o4$(0>M~|q8{xLqL#MGD;D`Iu5iEXhX_Qw7=6i4E8 zoR7=ninubaimT(+xIONO`{KcPIG%{F#y8>*@z?lU{5#%?cjLWyKRzuQ70ruQMeCwN z(W&TMlovgV-o=n&N-?dNUd$@y6^n|c#p+^9ad~llabt0FaeMJx@y+79#V?9q7QZh3 zT>Ptew|KAkpojeL7&}&pRb!164vs_PusAMGi__zbI5WB*!H}u~rLuH1tXj!T(Q%;Zw`fPo9co@@|&aCFPxNU4}JKNjAj&{P) z>ofA2H@a?znd|?4;qRBO?bmCcIBJc&cHSUwmbcF*m?O@)F3%jZ(w$pBwupV=;5g)( z@4xjk@m#!pLv4Ipht#9$h4uP+-@o3&W3OS)gs{XBFJe?s?ly3cj* z>t5A8w7Xij)%mD%37x$=yLWc$?AqC-vvX&CIwRX3d-;~yTeR0`FWz3bJy(0?_GIme z+vBu{+HI|BET@mJue;W?tyx=IQ@4iF@2RAp(~qr@X^_55zqS@^E!tYNHD_z?*4*jd z^l|zyMfyCwoCZk`-%aaF^-6Wp=Cm=*OLNk#X;G;~sabk8U8}II(W9h`q`##XNqYMtih_qem z>1V#wE)DgfuV?N;+ML#tT0wj2nHqQtsR!EEN9siCkf>B@N1Ehk%4fr=iJf+PgH(@H zhg6GH%56W5>Fnheen)S2eSp59zy5ma29G8sWxtvKm(*MfEw$2G8*R1IUI!g@(peW> zb<E zX6N*4fd3Gj^CR*lD_Am+6MxraShS9@uNjvCmXszp2Clli{Grame(d3~^uydk)Zyb-vXd=RKjJ_S5LK8;})1GFMv!mvxx{S$YPSA(tH3^17dHc*E? z9l?wA>BO)V0M+za0EY0#%fLYX_$e4fl*L#`)FNuv7epO^Aw*p;lxPJWB-(&2L|ZV7 z=l~ueI)cZE&R`AE0}LlBzzCv07)gu=qlhVBG%*#dC#EH^j;JP9U<|R^u(fLd#uD2= z9byNlP3#5ZiTz*#aR^iqM-rGwoFYzR5^>&uDa7SqDsctaMqCND6IX$0#MMl9dn>?n z;&!lrxP$3p?*o`YJP2kI4=1pMc$9bovxu*n1m+Q6C%%FC#2*av-u@NbH~TkmAL9Q- z{2P0?E`RsIb=U#Gj{N-(um^wt6KufW{|6hAJ76R7IPACM11w9PAc5t`6O$*!#^lKj z*o-^{Scp6wSdlz47@s_A_pe+9c|L&6$;*Q+$SZ;^$t$t7t0Kl$|L@4)Zg@(JV<*NY&ZX~7NTvtwLOK8Jkn+7aXn!Su3sAjTf# zXUMOt8$o^p;2`qH;9&A6?6;qRX>Gp)IE4HwIFvj9hmrrm*8U6NaPq&w1jN`096_u^ ztb!wnRSh_rSOXkGtPPGM*6qTv#QMZ$adrzNa2l}>u|G~H4mMpln>d6x)Y`)U?jeo? zD-)-IbBWU#_6&gYh%*`XT!0pF0T@YKp1=~s{ltSfpLocC3yDX-MZ}{F`xwB*#N!P6 z1i&T4lMMSb5}2QOhIkg263>|gE+gJ1-o@p_`v%-Xd=9Q6{s33gZ-Hy*&m7}g`Ww^V zY%UJ^Hvrs3{~d5MWeD6tnE{+nSrpt#Sqj`nSq9urSq|JmSpnQhSqa=l*&N(WIRb1z zxdYro`4rqs`4OB?ogIuzod=9ZT@Z{zT?UM#ZV2w9?(_z5KlKpmp?H9L6!mmGM7@xD zIbNV%PrU)JQ}3hRk2k3g8}K&uY48s9S@16PW#T=lKM7@5slOU!C8_@{We=(U17!oL zUnmPnWf{tnQdxttlT_BE>@1b-Df3I^Ov+7Cxr8#WR4x^(mqFt6a){MyKv_>Jw^Qzs z%Dt2kQn`<^vQ(a=tRKLE|nJr`Wh(LO670Lp;8^6vc6O& zpd2RE2`LLpbz;iyQk|c&kyIBD=z5?mAk||j>qzxN%E?l_p6TM(Tfu$v>;0gtBGpGI zJ4*F2%Dz&4iu>=^XTb35Yhd{GO-O$I0F*1F`XS|Vss2J)MykJ3R*>qyDQ8Oql!v83 zqP!vvT9l`y!3fGD(qJUzQE4!W@|ZLjO?g5Zj77Ou8jMYOTN-pJk4u9g%BIp_BKi*v zp`S)@qe2n-Sp+w#6rrC%aHCEU`f&s|7AQhLiQqjoZnP;v--F;rmm>752yP@4 zq3=g{5usC%dUBM~QhKzEW!WjpyeK<1~r8ltiHvqjf9<#zNo&y_ z1+?e8hQU}8i|W`Un8DL%j5ZJo1cy;sNWozwB%v{NUQE*D6kH)mi*i)1M8P5bwmOAhsd$k^gJ_{1Y8n;- zH>x8i@&41ex6o|1q@YUFI007$#v;Rhc%oIQIF_yx+ck9E6OK(3LUbC2mO-fkLvuk6 zrZ+j+ri+RU3u9FyN+hVRWF$zj zQcyC0h|naR2+(gZP0FGLlcJmn{O-^(z4yQ0GoA3=ScH8q;0TK^UNF7Tx&MAA^vnxi z6!_@W-}m!y1c#_16Fp->h2;1*Fe=I2dNn;)VB+d0m0Kz<22zwq&Nj$5B)8`F7iHOJN6~dV8Q7ffw8!BNnk8?;0mLJ zPMy#*m*(GtCx_wSa@naVzp{kG$o7kJ=%mQ#4?0N%kCTQzaiY=lJjQy@bs%=6-9z-j-M?Gs<9_%Il^erBPc)@x9|W|VE|i1{W` zNJ0sXyJ<22G3hDfs3_ZzN~WG2h_C?U5@LO_zrL6NB#Y~hG%HmGx*u8C>paqv6@ZHD zy)0qJPYDcH8qvtdAX!{rUrfN|H8rwyUu`DlOnoqJeGH5CU2p(TqvqVxgepXeEf6IU zu^mIASd{ z(?0iWw{E?*7F-t?iyx8iKP~041u1Qf`jMrv#$#q_U$ZEMHhee$ECjxCng?T5J+i5< z*Ua>WZapjS%kt3@LW@b7Cn@1T+ger1b8n~g6nlDg z6~oepT;H|tJUtMTRyrice;V*;nagzLTV31rAC^ybY1CC`CO@#mfYDg!{$>p5r)8(xPMmcd@7}%2AeQ zxno|FYy+}9&hjiz;AYuYyi|8xh~vq*NgRXg)|c>G-L{ATBGEqQ$+`W0 zxQC@eZxY7ENWJbt-Ro_>6(Z5jH`}&|AbWPo!-zo0T*%@S6w^{agc2%A z=eYUKupb&33&$Fu{pApXcfdOi83^itpd?*P(s8+1NO(K-=YIf;zHUYHYc@Er6WQ?E z$o|HUTam9{C7jW#y8nX_-_#BqL555eArufQWTz;Tv=e!Itq6<-?9WD3ht~{bvtIhz zBaPa3Y+hh-tEC@14nP?W_sC>kPuGcC$ssJJa610lQZt`q>RaXe_F*`&%CEcS|avDgb8 zVUH}rYVR!?AovA~|$^=q}JRxI`adW!`ys%HwH;-4;yKrlmR&_#q`4P$l5 z%CRjHE^^|ncFwTpsCq>yWCKDeM#Jt^OJ!r#(eBn3##>vv0%LJ*W3$@@=yo?Z&iPAf zwKT8A#VBr-M=NdW2<+HFU^{qgYxf+)yr7cPXkJc(lnf>v)f=V|7y>3CBNTNPW0giyX zm8(~?e?D^nA{AJELUtZnV*w|QE z;f(PW&tpu->h%DQ5J!EgrMzjG74r%@u7pB-+%ZY&ty2Jc>3lxKc$lBRv<}>@Tsk!z zHJSj;#%Orz5*Zh{4|INw0v_h)&*wv|M{pV^{mXE-0y{__svYx=l@C{i42m+;W7A@v z7Z{7@DLgAM7S95`m2rec*QcLZhn0@*GX1NnE-N8bwY;ubVj*xH{?YY_^3q-1?$PJq z2o2=WUBu;Mn;mku79H=*@ANTUzlGCTW`0s&ES~l(8;p}DA0}~~-EHo;es%`-Pm6=) z6SrX@ux`2QI6_r~7H3I+8}upds8#CCo4F3`Ox~IKvF{9M z&wft-=3|t8Mw`<4WMB1j`fRsqI~8)IBJ(QY#~wlbWmqka*dGpDfA-21(E3~FM-|rG z8k_WXgsSiE89H$967zyE2^W9+Yg`#Mjx z&o^bvzj88&J7j&IupF2 zY$fSl3NE)Gskei3YySJC5_np*=U;_;&WIA1susLx{@t~=xD;b_cFvWI5DL09CstPs zn3k5fkS4JtONWcQ*M&bC+Q4Rxvwpu)sZ{#?taSLt&}fb)TU(QHvjNY|>{sN{iM6#8 zOR{p?%(d;&sMTz?Mx*VU5RWKK;RreC6Jnv$O^Q+h!&X8;qHTSDWxq>XxeQdleCvs2 zjF(T`x(^l`1pClvuB}_3W8iM(m?5Pu?^|bM)0;$Ngi5|>OV3;Y zc=m)6ssRNXEph3Wk>O!}zF2<5aee;C380+;vh{OtA?0GcSvWl4#q9m*3$F^e4jPZ7G~crNWAYrK%?rcscJ# z+p!`B)G#?;SmTcl~C3 zgug6LmH{tIdVC7DT)hgoj9flk2HQ|Qy5PNpBo)TmF!DxJ1jhZP?d_$$jp!2>#l?$7 zfnfSKi}L-Y?Z2@W{5gG5T>Kk6YkLPg?N`d}@l+{Nl9ET}H-010+dRrSy-Gv)5)J47 z4;~4r8O`?@0E5HG#Kjc03sTnzrKs_MT0m$wRg%(;%s0N2cpiD_8_g)x4yoso7r&Ue z9(hU&;b|?Le;?fC0=V<15z*sy`~8zEud16TmfrP z!kZl)@K1e;`>yl(&pWPPUKMzg&mH%>zuR@V|ARm1bBBM=P1(5QeT0IV9or-OO1#Vh z&;BYF0)N%^0`|#I!lyi&1%D=@&H2v)W_!Q<%k6Y9oHd;sg^r5URzk;fFW%vlnDbwU z1q)t!jZ>@IQ+Y1*V>(U-01)ezSnkL`+ElfozA%1=~Mx%)i{eq1kk#6tpy;WIEx4H zgl$(%Q!~?~Ah)i3vt@nr%B`eGQd2X{>dv4|Xss5LmFCyJ)?6WRtwu?EVE4WOdGp6{ zA7-e9#t4CEVIdTUB;o|8a8c$FB^;#SP!=s%`u8vZXmfh{vs_cnCu`Vt><@gF5Hh~#9ACZ_b^VMHqhEDFhljsKf!mCZju>6Pv z_da1M-UEhxd7Y5;%eL`=r&v!Q6``9mn86I$C_yB}x$b$*X1CjHdR}QK4d6w3+#5bRjC*>Hhoke4 zo*xadp*!=pI=TVV)rt_6)!QcGM#J|!ztMekD zbbwc{q7k|cp~a8`-DEQMqmGv3FeY}*Sh*;ogqBg*0t8}7v?;j0P|x$S%=7v}=~K)z z=yY${zWw&?Te=;1{-*xM+6$QFKY)e6vyH)^v9Qn>3^s0?xMOp(*X{N;H}ANKzH-H( zQ_Bz7##;oI`dX2W$xE|Q7md*=bQgL6y#l?-r_>Hq*v?m{mt$Uz%e=cm6b?a;$*7QI zCz+&Cu`qycnvavWX>D53BBmUG!;Ay)`E-gV9(MCYE%#NFpsp209! zd*cG^1E25eF_?02cM}4!@uyQ(fp}IE$6~KgHLbdQy9&e^vojQPX_mlK9trEEETlLE z1FZ@0u)o6LpI0PB8ByZDZ1i;N%$?m3fH|JgOOm+Udf>%N>50|V<;rAqe&6Ioq)T4nyWZHh<%zhVdwTAdAP=KgTGcuYNTp zl)u_l(0b=<*`QLR%F3-OTces5eBL8;vcKWH=7SZjFRU%zkd zeHz*HK>O-XJ6c0EP4+V1`RORKMWZ3+e@?>-;4W6H>SvT~dGqHz%eE~~&E4($@Lt>V z8fy*4e)@fD@6*8BB-&s9H1l4@OhajC&QFU*L)cN2LbbX$f4)|!;KQ)89JrokJN7pG zTi+PnflyGiAXcfEA)a@+YVHZ);iXjdt0hU3^gBIwka;fWYipdlUN&$&#s&k%;DU0A zDyDW*ETy8U3fsBVSM7q93LM=pln{TFsKHE*E_%6U7K?y*uA7E==DX>WA#1QxB4icY zA++;;ztso>%L>9qtKZM(&F7EzvTS=h%X+btwx-!q#?SpMO|ztoe?0oJbpbH=eqGl= z$Sx1s4q+bxzgcfIq--?mO+SG9&!SFON&qRloj6{w?S(jg{@m~HF1!L2t3h zI7~JeUT`cy1tQegY zRYeGyynH?rw2U$|L7V6lx&xg@7tsr{KZX<90B4be;Yjp;{0SXJ@gy2W@nj1oT9@%; z)WC$slTjSq6esCqRK}B0q~TZSTh}!Bem&wpgTqTZJ3BiEdwYjFJ3Bi&z^60%PC4ux z?(K1!#lZLLZgvyZqoa(op(;_d*F zWkBHj_4hQRu9Tx&TqfGT&>3A*8E7mPz`$z!lvNCNOFen1>5M2pUgd2*Vca z34F<$5a-yw*rWY~lT3L4Gqiv<&}$JYi!_;>sCbg1I03mP#9|X0<#4(uVOSb3z)*D@ zRplaPr-d1S0I{5AJ)q6|_S)s51Ix>I-nqOCu)KU{=(~)PN=;QU?7}Jr9$AF)+cqeb z74Grr0@o^%(v90V)y#+kz$)PN@&R&Nnm|Wzz={G;s}RauKODqySgF;9`NOBqxTZI4W6BAU zpn+whEQD~QEFcIHA=o5cMTG0)_K=4o#_Qs?#)y&_Y5wO93j3PM!XR2%TT2tpEe&H0 z41+z-XIBbPbd3e!>gv|!R;6m%FZ-=+e(&(6ezR%oB2?WZ9SL0xVIMS%HH-5kU0Yj; zf{>{iGmKlv=eRbuS*>hsZmq6{0n>ElYyZu)$=`1`oBdGL#VAc&H5B?^&JlgNSVta8 z(GYDP$-Yr%Qj{GjYkKi5S&;Dvq2s`)I5&(q%-g_W<^rEjIl%EevtTx1f~}{g!URMU ziThQw54_#xa40k^b2jrbPh{b5L(u~t!rHqdRV%)Lg%s56uk7QuLClBAue z7g0;w8=%o-CR$PErjW@gi*m|A*Wp0dfzJcPKsoIOGq!2vSS8111a&>PWv5Q11VAR{w^j?+Ae zvpmbG2n007N+v~_OvYuh4dLTlQEo$;Sw_;8A!OAlB0_&>30;QJN2Vx8K}ZFTZn6w% z@@I2I;}4;r7MOiEZXcdf+AvrJWK$|c4?yaSc})vAwCmCJi#XGZ7SEmH0K8r4&$;LonCiLIQV|O?)#wYec!ZOf#V6&GaF=Qv$NR%&#wXJ0Gz`$UEi{pW_l{~R>6ogU>TCM zDD^df>nW%uvzR3Evsz#btb``%Hk4(aA~e>6dPgJ@@)i-b1jkzxD@j_ETVM`Mq@moM zF^Wb~lJiH#w8+~L@ohMKW};#X3iO<0m*ynO@+^<=O^cE^NlDyIN$H^fkI_0#@b-Wx z>nuh>-qO~-YuvGzq<-CGI+WK=jG7DNES!q>$idFv1sq&lZ)I*NCt?d41`1XhodJoe zU{4oKVnUO+OOsv!D<CT@IxKf*Oh#^3lJj#>=D#QC zDS$ALERvfwg5eL0I)I9Fjvhx|fm4_illN5f#3g=@XU>5Y zXx(7&-tZf>;I8gnfW=H;m&4BCVH;ZQb_-H`PZ=uw|5WP+_5XjksQSX%>}9z2mcZSe zo#%Uj?+3jU#kE*xaD*b%l|#e1`UXRNQ`8|!oNVWoeHYr?wP64+Hrod&X=y>=!r<7P zbWq)2d}@&tqv0tKH~_j-9s7eupK|ziHwfKtlP;bEA8qz}&5zD?2e|mCZGTj7c-gmc z0RC;Sm-6-ZUtF8IA42xa36{|qok5Qx6hxsE<4$f1k~A6d!I&9{6-hopYsE*UFvNpA zTs;#J8e8PROmEXb=e%PWY}<)M{UmWcxukF|1n0_9-D7*AkJJvM_c;JRFbtLfpZSn_ z*_ef2sH!uW!Jf+uLpV<4u*hM|i3Bb6`K!?bE{A>(n&9(GigZuL3}dG8j`+injak{C zoqE$?4`%2VbPsw2p+%bp6I?A*3aJUiHvor3HAXYszyKdhQ5NL}Hi&_7lP+lz>H+@s z$w-tkp(+s3fQ-I2LenFktGQzEK-Zh#rHPul9&kg+RUSlCd)(=+b8c)rC$+Vj z^m#0gMW2Hi>Y)PNidMrB61@3D+6R|D$i}&Gn#9pKsz+fjfpVf)hGxIvCdbS$*5e+) zGB*h2aLB2q^JRcuylxmwUuia=Kfj*B$vz_V>2w+dwOSCs%rKa5E-h_#?kEG>aR400 z4$3<^n@dZk&kSP^8qJl?UEAAtbyk`Um><=GAP8#6_IVC?5pOHctD4&FVWm3#3U0t? zLmh1>DfjnZ>h6biM)?Tsg2pB=JORd4jFMv!8gD~q;l6jyE97>suLbPD|GZ z|CI6Wp5@2={ZXCX0vNbWKGlNZW_VFif+VEJ-Y<{1f_(JMC#4-76Z$u;FofM!7=o#5 z;r~h1^-DXA*o81`UHi{nfi-l#p8D5_#qRvlE<8H!Zx&auxF+xv92SPmf$45VD;dsR z4wL5$GYG?$4q@1u9~atK?N%6q-U>rFV8;P3r|%_!53bLzG2?)$qxR3UbN-(PQ@qo< zr*NgRGuUqk$xEdbw1&12DkrpL#AhRp<8()aCIcApwUG>x>k#^LQyj!FECikk{G6FX z51t>NAwTRgFtW+xw2RBNUNisd{c0z}*P+MI zH@xEbO^tL4+u*p$LZ*ddbwpYYWu60mLO)%t7xBBTFj!a!Ld)~G<1IA${lj=zoEYGLM-RMPVpV&JQ zkVPmt=qFrY#rc1L?=+*3IB|Dnr5iIXj0`;zt(J&r>u#!pP&1>&NQh`LGPSU!*LdyA z;pqgQK`%fr!K-n_M2zK&wGc7>gHp=6vrr+$s5I2koDsvam{1$4htjKh{lxfARZt2< zE*z5?26YGhDDJiHU;(Pzq2~)D)UI!V%LYm25DCmF9N^zR&kxWo=uY$?dMVmRZ$lqM zpGIFp--VEHY(#5EC6}cTdZJm%lhmQKz~`dg2Rfh^1YPXfvEpn3KQ|h|kR;rR9TE6+ zP66xyzlj`$3h2(J?*(QnYv=af;O@=&UEI4PV+-+**JMWSj=`SN?SoUB z7L^kwX)TPCv=xOj=oC>W!D&$ zJr*-j8?7R==vqC5qeW?hfo#RDC5D*)Tv?;gV3#t)?|L69Tv-q=l7nPnlZ#ljNAQaM z8el3IRsBuG*T8=Bu-$N81O4|CzGaMN_#E?s^mVJHoqXhcy|>;YJS6-oP?u%dz=EU@WUFK2ZCGvuNaA+0FAxSJ;15SJ}#jsWxtMjd)FOgZc@!#FxZ9nEe0Bc7=R z4+nPNQWrS14TJ6Yrgb<3@jU?6FI^qY!AhzMLvyQ zh+c~jBs3=&69qkveF6m0A^irI?roBW7eG(xlrXpezndt>=`F}A1bW3ayC@V61fTez zAE(JO!0BeSY7pX#9qzlM$RN51RigVkq3nGez_1lXSHX5PRad|WQ~>_s&^;M2%inHv zUtITnkN_1>d;s6CKT0)CXRI;*!+t`YCO-k-i#lVCFytGa=kWDPD-2a#gw3k$IKVAc zvu#5oj-uF(sS-;yLX0_BOQsjFrNH;Gs)u;XxS zP&e71@(Z9`UtA+;o(v!)5TV^599JE&a(IavC27cs#oZ7uiDC=nDI=t}h&8~@A-&j5 zbAbw%{AX!ENJ+VBji;w|8Q+kHkq!6v|AmtOB|k$K(5uj8E*G*XQyddYWvYb*uTnpS zZSF10B25OEmQu8UcxiB0*%-hwK*NMkd{pDKkDsB`C3hj?3SurPVTeMfg3lnk0+jaBG@)He;%-cm20B`@ z%trI|Gu3?U$R$Dpw&}Q_B4~cW@7yxvls=B7x8lgJI=kpwU zUK0Qa(KHh)wx+47rl|_NaD40e^^J;(hxz&Oi6wEHe)8laO!f)-000_M6~iJK)oEt(1LJsC*c5+NhTBo+5)s6!?_}7MP0vqiyuL~zO+=YL;6tK0|TXf<(1UyOIA(Xh>O8e!cCl$M5|~M zokjPf7srrMz@-O28VN|=tP>9c6+8Cu{2dO!Zz5qz8F6v!P45EFKs+f9hZ8FYemDn2 zp5_A%#&2*yOTv#d9=9L#S8d8%*rNNKI6@ec8O>mZI%tBn(LLw|=+y|xQ3SJ8-~`7K z4TvXFP@qJn5eOC7ZF-Y5jz&-vK&th`Njj0P6E%Vy%Qkobn(!%-SrM4DOpZ$IRVqdd zRsrJZz){Hsx_%CL#Y`Ag;n3DO0N3}{s zuIsujTBomLamn2#+7B=HrFC7mZC%$99#b3WqO%$vkQCLc8W1VA)L~f+;2iB_A;*`5kVObIT`4e-X-TMpd$puRDI`Z>cS;h4flr8<^;P@M;{5qy zN7UjB*Y)SqF+BK(@D{lDncvQS#0mmq^A*f6?YqVr)j1r6mSx;TwV(X| zF#6D$f1dvmLJC4RXK)i{NJDK@B2>yznbMN*#BCZI>Ig=V#)6w~nxth~l(H0(NIv@duAQva#`(h=nip z*|VFQaTn&FhL>vEOCcHD@{(?F>ZIR&$t{BfQLYJF9yhx0K@Xvq*+};fDN`c#xi~!_ z*4%PJ2A)cJY#yGAHkq4M;dHVk>|-&% z?pRnr7NxKqvR#PlJ3}IAX8yYZQ%c!RLR_)cQJY<8CxdczkXO$RbcEx`(G;C$EIYss z!P$bWg(?~)QWioQ(uKF0s4C8d~sUL7Em4=Q-+=$>WPr@?S zHOis6{atN3IEE$4EaTAfT!N*71kWUiBU{JHccjZ9Y3*p~rhr@%-zaWKS#7tgp37J|8ub?! z`=e3HnCDj8?J68PH(UQ~wcV~%DvbGVl5EoAd5lRp&PefblDDIm^8$&V%TtgNRs0hK z%9KIV44MU`7yzD^WZ3@;l(Q}lv$;3f_TB%AV6M-dg%w*szm)}t`z{mUkQ06g4ht8w zJ1E>Epp0@2ICosXWo+nf`L4rNK#2AN8}qs#wbf(H7i$mY=q!4Xe;rK?q61Clo?{H$ zM`%8=Q#>;@@oE3Y9R@=l{LwB+(;Nt-6;4Aby~o$=iHa zX3U}-`5~i|v?w(~yK$bR~?U%ranKxG&_5@`I@o|2RvZrS z{V2E*Qb{2x>mJoC!MwkLqgTB7Z{6!NC6TA zq+QsqWf9GKV&2B4ex%|V9K#Gv&iec$_kB=;S~U!U-QHkrtm^=P?-*pn zY*PfjU$;%a&y}W>U`h?%D7Dv{0BHJyCtqNimbGFt2Fs>rxT|6dW~2l`Sgi%Sy)dAI z!5tU?t`RFsaozVp?czO~6a>_@T;TwGy>ZUe^W&vB^;3F*A>0Sm_{Q}|8_<7>xs40jU$Ml+a2k9b!pnS z*ZlxbIbi-}ml8{@glvyx@D5~{Rpf%@*}fmZ2E!VE;76H;*^jsiq2>>NTRreGCPLKe z4%1Ri4HqB`W2LwBwtq%J+Qd8psGeWyan)gt>xKZ1#u*Mz zV8+!Gss|R;fwHavA5q-ZcPai9z;39+4>PqhNhhgQl+X((N2IJbk~A+_tZx=qyLjMv z8t*fdOf4(~9y~SmEV#r0_|=K1<=5j@OWcb>W)b(ahrbR0`-;}mDg;*h)PaJrSPcln z){Qw&@yuFb2;8l|?8Nv9fw6d^xA3wQn5AcQa|SozIfM~GCh|~-B&zEy-f#(8LMtdk zBUGX-bPC;$?m%~;d(cJn0NO<_Mz2IqqSv9fq4#my|Ht)N^cD0?=sVE&py$vpqU-4Q z(4V2dM*oEV8{GsQJP^=;9xOoyCESisAX8c99OtE^qAXIH(lV7PhrE;}2brgm=B1?N zqD)Jf51`~A^OUB!jAfpdG9LgfX_`x#<}xmGDodJ{G$>@5qzRQYDN{m;EM-b%naVPy zX(7ubO{k&R8Kp^?7rFLd{2wDEm+~Gd2f~N~RgQ$1m}VpdVQeD^C}WQ@2CGt*QZ_U#m$D|M zQmND{mA0y`RVs~2MVHbB_#)>yBWt=4HQQ2{UAG-FSX&zm*7im#qm_u!6{}LI28QYc zRl_t_?!J5F?v+<s^%fONU-T3;YCQUA!*^S1T-Db0?0002I+*qhD zPL}#?u)aPh*KCH@h~w1kK;?E_2s)_O2eq|Ipsi_M6;s`|2*rbXeNZ1b3Ag8)_) zX4h?p3<9PNbRlZ?cYddR&3XJy0hb_X-@%&#Lv@0xVVWxuqbpXWQVqWE`-1Na^tEJl zQL*$zPf??WG@XX1R{iAc+2m}p0?Ww+vMkH8dt(tn2Ceqk`lCOx{?HCoZr6pN1B)pG z;y88d@yG4Q?Erk+g{)~CMyBhQ@##++pV0%A>-8wo1`dOP%2{3i+Sl~28WKkahb#&q z17`p1&)Pq0&+ivF!valZ%Lr$lDs*cS(djMi9M!x`Z6d`GfuXseY zDR6yT$4qE4FdM8UbDYY{9fMk%OeJ0jJ_MWpGrpoSUaiTOcYX!G?j6e@&5ipmRXF@EWnSmCSxG7qSa-5IzXnYBGVm=%22lX&isAo!9 zt6G*mslY`L>FE*y5bU~jOV=s!6wZtfmx7Ry;xO`E#gI$N&#UC zh=bB$n|GDaMm&dIx4xa%EXy#YtbIzxP%O!FZdW$+2bpWg`+`wqNHXlU~xfaf&7km|p#Tv{bDp;*M z2$i3Q(lY2G0j6#0?L{jJXt#?&$nLJdnTwvU%19F~?So5S;JJ$dwW9NKr7HzsvHP9Q z>kz;3=pCSQC`v`h*&pF?MGNnmm?UZVO5&QpFjo+JO7{GWX{pq|3wU!(AK&D%kOESN z3)z6U5VkEM_Zdx!QtJexk~oqcAqhPo!Br9^c{Jzuu>f~|LjKQUq! zm?MsC18(Kw=W}<)P9~Vj{-lIGhI-uT4F(>QZU$!(3k zeEt`!&{&)Q88ox`pJn)k|HT}V{kXj{CD1095RZVsl{gAE!X31v$u`cnQM+u~ItY~- zGp0u&bKp+f{Se1<+XUcynda$+kpb2zUK9FsM!UYoq$%`fVt>b<$d=$a2YzMG$$q>xM(A9u zoufUX-s5=U;OxhmF$@;7Q(@1NA@h(WkI+lT45S$9EsJskTvQWzmYWn35zSB{^)y!S zQ%RIw1K!8x#G3$A2D+CUg#H_d$qGJXoN9ovqKHOsp_y00ux>V8&yN?NF{}oWLIn$Y z3(dSLq9)Zf)oYu&szB3q{oVpJhW(nVDvIYT^y|ofHp{y)p#T6nfX%R`8ULtQs&?R# zP!TCA*x)FHSXco}JZN_)_1^=yBk9-OC~S)!ty?w*&9P0(ux!Hs$F^P0*xkLT zUKbMN9m|{RCz@%$&%rQQJ1`#5^o5uh(L%ivRw{m-_U_@9Bc*O>DZ!ha4GFFK8 z+~Io0ob|%T7QWzWZ?9&E+6+F$y>8Jjx=B1)O!)_3I5-Ld#flIb#VT!fS>neyt6_Ek zvUCsNSIAdPCG@{Se&yFutD-=RZwc7-onJ|~Ds|ZMw0*P0zvB9^_3fCspKzQ{xD0>$ zU%!|nFTN=N#G4SxZ#R>BF1cguO`30)2np2kNx?XCFn_K8+*jo?s5?fYul_&DOhzwgAYG7T550fScM^VXEd*2-NKwovqP)Tw!yx z8MKEYDMBqQC~enSFTQ$fhxlRR8R7#a+23j2m2ZRh{HuBy`&G8h-E(#Ye!+7@+N0(% zuO{};p9h=Rvq@}?a1s)<4QHf(jAqagbQWD=8wc1kYFAgd8N|rhyf)#Q!Hvcm84Fmh zdH|K(G+e;Rhv>m%vVLSX|B(M~)Ocil$blqDVY966Gb1QckjUpO^6b;^I6u ziW%#6-&T}N*GpP>po|D6V>WOFM#|3*H=aR(P4B3 zAzww}>j-kyN>erp-lp`C;Fts&L^<+EMWJk1MZi6yYjqESXQ1TqICy)tZa4q~8e9J0 z9P*ow6c#Esp+S2HIW4r&P6G(%xH~|zXy|nm17k=9^t&UKX1Qq}foxR^2jeKThqMpg zPA6ctlUPLbf_faS^_K-*T0F)EQ>jBz?_)=R(RIRA|G*#&Rhn_0X#A=>dRjtj!Nu15*kY~*aGPk=YCy;^k=rD)Hr#{U8qG|Uu=8}lDgt50tes=;`%VUe;jtu zEAu^E(1scXrP@{|F-Rmw;JAUK(4qJPMv)aAU)I`~1jo01a+(np?_t=%@%}_> zW0ue7=OZfOW+a2qi7hJ*Nt9&~31iEOoiLD5Gqy;0Av?EhjMmBi7~lSR?p$^uBvt^$ z83ipr%nYiCzWpytiN9lfa2f7!b%5+3oFpt7O2YkCchY@(3dqmTddX_h+p@&IK2j2#W znI?KnxULwu!g0i!@35}{lsOyY(?W`JkY_94TY75aoldO=yYU@5+;TlB`XSq1H%i^` zLviybf&L@&=POxm);@f#*7@_*ra1U-oc1Ofq9X{AcpwZ1#q}K27o!}HFt$5}X*rG1 zs@fJwZL&$Tibv7ZR1|Ub`-5AlkK;?1V(f2r#4E=!blY^uw&Tb`*SO58)h8C$P#;}H zh_$h6?8sBdb%X&aR4}pOPq9i!wlN$u2P>b1l#6g?R^tT6jVx8-*|JDY^kuhoK zoHz{q@Ts+%w!OORuXVvauTY+x0QTSuh#-L+t&Ld;0hH2i5qKIPi5re%0LM#9eg9kj@9zF$C?}X> z2mcz_4x3N`?BF5FOj$7A4xK1?R=}b-f7yzj1J>*X+b=(-OSMq(4;|ihc zt`o)6qy76@p2LC|kBe4o9sGf%0^4!yKv@GnPI~km*g-v1qI0%A0#gj59_#Zy9WJH1-Y|-e;U?TvrFruv_3Xrd|;!&5dix$pRoas3`Pu$Kk>0^ zT7Sp?`s07}p&={d{|mE0hy9;u=mS@%3o#46nQ-iPY+-Bz*cflU!*(W&53>(;TE>sJ zT1_8PO6&(|*oGa>x%_+3b%ZJ@o?0HCgs=&kP~F4WL z&SwvO!iSMR{zo{J@_om*Czc`1Rpj3U7zY8y0c?qiKNidhulfpXd&V&pZzi{#c8mdP zvsasmPAaa8hog04-u)5BJv5u+@n);l%#b`Ezz1`;@c`RaIOw}_3#dSAwLn^aQfZPV zX}$m=T{096pU~r^X%%_U&r?yx5PwARfsU=Q{@*VI1(t&{ebu!KJ5BAvc4Lg=1eSd= zT@qs)|MKtp-|}}WvQ8`iDa!B{VRmi-DCt+$*Vh-A5pT||Kt-QxvQWF%ZH&`od-~7y z97S(Imk|O59a`sEN??|3LO*Gkymrx#4WiLRQ2O4gdKgyJ^fTejhQ*B^d#>XI>PC5Y zvs%^Z%1Y|is?EF08!B)d*Nc6_twyY(`T0o2jRp|fh-3V2Z;@)~xSR_&`t%m|{fT*u z=O=t0Z+$w{f^*jis|1@AH?ou{Hx{I=#m?*>0Esz?jcw?TE)Tm+77pfI)r(VQx5u=@my8336VVG#TO z>w{kzV&mWZG(mosT>*>-leOU1EsAqXU%z+CG+rSbZuv^XOx=53TREn;rUSUOtnp?A z(Ki5>FDa$Q+R(7vHA9LdLSUxNw3s&22BR^;s90!#wzC^R99e1=aoKz?LXLgaMhtm` z{S3jg%zm$rIrRKqzvzxw@@QBlUV7Yd!bQ2(oGK+Ufb)8E#`!`ubnB9UJ3|RM5iBj; zEM`A}2>=GhqqV1?lnRcao}`sx=~R5D6ug-^z|2cBJWBG~*4`bolLd{1rdr2es(m2P+yAj0C?<m0@&Au3s?SC7aj9+lacWwBYL4~)>2MldMbE4&;dvKO|8FmCgX!-i_?8laxV2iV zRjau~2-TjQZD&CG+u&VDsvgJ>14q4Q`1z3rtoSP{N<>xe2C8^e#6TGni*H z*{Qvn;T|+l?hOjaK)~G|y*;g-~dbMHUeXUhASnu?T23$bpAolPIaN_IEf>uM&-z%9ExR) zc*wudJChdLNc0lQJMn`4if)Hi4*km z6l0)(c_WH2j-m!Xw$8{TvbK;Y`5J zYY@L;SywpYL(QDuD5#XQAcP1;78VE-gb+pP?_|NOOF9q|`5IM0`_Kt=4ZRh8z%w~H z>UVV_X~9K%cmPK>?5Mz&%=tc^z;nZ7>%3joD-oWr>FAP0TyN$^}VIl1C_OZL~Ig2sFM^Bw9heFJm zz!G!HJ^~*Q+jz}=P;&It$)z{p6Vh?1P_kZcx7!-rES*Wl|MP(2oJY(Mr)d12o^~6J$}@OldtvCoZS8qs=-EPG6-+kV!$)j2C#=BC2|g-MojQsc#%J%j z``E!vxa1C^;?KT8uRFTkZrAHl3F^2qNoTTbl5nmb5P%t>OPnyy$!$WH+275c!ko(o z1zAmI69hQ7F`F=N@Tlu}WrfLUg?uQ*N&v@Sj>iqYrj6;kTZxUbExGuCFn7^!y{Avg#yAuO99 zi~(z(4}E=<>2;;VsIB38DxyYc9o<47KyRYI#L{=*9btu@!$54FUC zD-7^g0AO>0B?dR}uQ*N}1m0`C>v3r*#Scl0K8cgFe2r4=a=Myj09m$5x$81|_{bam zFvNKOfiny+xq0X?#)l8xBpB%F1N-s#j~oEkt5mdLj8H6tdff?%-!@LY9!LO67!$fu z@mv6h4u`h}ET#LjEV_7(j-k8JBj}wgLL~wx%lua5a)*T=L0p$N$;5^2u}Y#XN7N)7 zU=hL>73~^uRu)3DIi#)<46lq@N}*gjY&K!wBqW1$##&)hKQNV#YdBy;O2PtM!xJm9 zrCRD^4z>1J;Q(H z<@M2%jG6~!mo$wCBYJ1Vx#{$?9whH?GM#{Mp$?rqbx3hRgU-wF7dR8r$>V|GY~Tlf zT9W#_;+&u5j3k_^`Fir3JtUXhhDwWVNk$eHC{=_IA+{`g{9olE$uSdWXcgUwuAs-z z3+NLFbw)wEp?nIJio&F?B^915_so3&l#wGLI!h#4;)6AeHNvU!OCUEQ$oH4P3Wb_(3l16MbT z{XNIlbZR>iv6Y>(EWhJiMNhvhFngW{jm7W8ul;e>OW2ic z4n{m@9p%&G4fLbvX9=+r7anv3bdS}}vvQdh{bJa|6DTeAhRgCI&6jC59F)tf=nuM) z`s78oy-aIQ7oPdxXy^*yLQ%%35>9JW=NK43L>5jcCH$ocDD~fuvR6I>%o1A&d}>rICr>pW|MoyRR1|X zjeY~|eY3&lBwwDRL9;RcAmRjI^nW*@{`BrJxgWGhe{3Drdwv(Pg}lZQ&cWu^n))bX zE9bZm{Sf*(+CjgMP{-~Q*>Kr78706b*}jM~cK6Ec01g_jEqJm_ihdFGy4FcBgsTh} zMH+V7%bZ7Hv=uO(uw&3&CASCdTtKr7Erq6t)T6Ag^<*C8aCf#35k&4ma;prS6 zun1q+WvB$P-BEukRT?<#cTF5#kuS#yQo7rv_}m|4+B3$IG-2Mo#*&PBItUq<8Qm)Q z;K57nDPdtTyNJG?9YSf>-fN3prc>C;+VMJseNOruOG_E5Qhwt187Ud_yx_9NRp$AD zUzMmFGEbmOV_@;Uj#p$hAA~@_f7i;AV`sp72^aS7*jy0ZZtvgUZo6(NFzJddEKAt) zwF!WU+Wc#R9RKsqWxAD|Krf(At+!tY^4Dc$FLYVzv>}$>y{FU8+iK}t<(#?QEli-< zW##`a5RlnvH?R0(=WAXeX6OBWN4_v(U~-W|GzFtFjEXLqHZvF&-2>Nw z)}=%*=h-JrTU;V^C1PwD1HeT_vjH{+)c|&)_}a#s_z;_r&mq)l{Y~eo0TOH)(pIGSh_+Pd>v$5jsMKa-lNIAF4hD-jj`5T+ z3e*uAGqtrHoWYb8d`=o~@sgDZ`hV2?OEJdr_azX2UvI4&CNqWd1ntYR$tPv96JpY+ zlzOFI={m0BpmrZYN0=l+2hbg89X*I%K&ZTe)dpL|M7#HhL>{2FjO7y(OlOc2TE;?9 z%X2^2%^S-w612)46TR+1D(2^2>>KqkvU+Os8HEoXytL5y#`0>LYYxZ*X-9jozmI-k zI`Ca@|M5b*8m^_>bgxfJjXbZmbf>w{W%@f?F#oNgtF;?a0diha^^aZ8{7Rj2y}+M` z4eiUZTz`6;N3WwVdgGD*Vo<}pvCn_UXSFeJy!54axr(D5;XVkPQ)r?8t5p)RGnjxL z5jR2fx*oi$23~tE@WflL3fAY~RUJX+wJ*3I|68*3N>77_8vmM3|8!VG_oIi)u4xGg z(AihAM;Y}gp@Q=5Pd^Pj)|!OYZCN{GmQRN>=q7qWOO6b3Q8OMd3zWREv*4Rk-EMOV z3tPq2SU$E0yN!A9 zc)T0mi2owo#4vG?xJMR~%gCeTD~e0CQ*US~-Aiw!zc6m5oLS4j9%;68rL0soM;XkZFy+nOmW7TZd25J}RFB{y3VWZl3)Rb#3 zHLtWFOQ~hIwb%N|mTX&MduR8x&vJx2o;X*y#I9D?MR&aycy)W-^p5r3>yzzs+}GQ8 zgrv;SgoW(a_#7b=b6sS&`*Y)~L17(&+x^Co!op zvtnMvmc|~B%Z~SspPZmgSeqD_xIW38RGT!KbSHUUiZW$ciYIk2^+j4`+SPP!`l9qd z8S^s9%z2rftQpzTZ13zBIWuw-bHC&r&#x`e7aT6EE($IVE`C$8pmcIsdii*Tf5nf= zt5v<#%{7Z^x7TIX>+4T9)HXb5+}>2#jGAAy1h$-Q9RvUXImQPJhOd`Y!^j9vdoa+z z6L%X943xGJV1n5}GF}@6fv~-e1|`(AvB4V@j5F3dyl)eN1d^C&8ef$JIpqJwB4b-@vrRxpEr)$9^&}l_Ke+)KcAG(d9v}h zOsS5eRx3B3#*Ic>shisBeW}vuWG~9fVv^eG^>Q4fnwpoWNydIA$!xi(lDjsa?K=zaJn`rt-64iQ;?S-Nwk*JA`Xwf3a@Fd1G#<+@&6^di( zvc9K8k?^Pqdqjj4HV9Bts0RfawPwkffKa8hdW49^+VC-+8A8G^mMo}9IIgF>ym0oi zF+zrLO+ZoJq7>7h=^UQ5EJdZ07j`jZQR^*%ielNV!ah?Drs829JcT*TTP2y=L?>i8 zdN|sAM2FSMs@$x?kRhGW=r%o0X_L`qFh3rr7{1Agjn)mF%F;NPQ#iK0|1tmru$~J& literal 0 HcmV?d00001 diff --git a/addons/fontawesome/fonts/fa-regular-400.woff2.import b/addons/fontawesome/fonts/fa-regular-400.woff2.import new file mode 100644 index 0000000..cf4d07e --- /dev/null +++ b/addons/fontawesome/fonts/fa-regular-400.woff2.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://ew3t30vlpjit" +path="res://.godot/imported/fa-regular-400.woff2-bb494eebb9050a2fb4b1382e97f43781.fontdata" + +[deps] + +source_file="res://addons/fontawesome/fonts/fa-regular-400.woff2" +dest_files=["res://.godot/imported/fa-regular-400.woff2-bb494eebb9050a2fb4b1382e97f43781.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/addons/fontawesome/fonts/fa-solid-900.woff2 b/addons/fontawesome/fonts/fa-solid-900.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..83433f44555ede39dcd26c3d919e5be5a3691c32 GIT binary patch literal 149908 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%0A*YSa{ylHXyb#ghALD5`%wG015U9SUxxI> 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
FgB2?%Xm841B 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 |Q7cIKf<`<`?UyD%bO{Iz*dWyQpYCmtK_UjJ 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 literal 0 HcmV?d00001 diff --git a/addons/fontawesome/fonts/fa-solid-900.woff2.import b/addons/fontawesome/fonts/fa-solid-900.woff2.import new file mode 100644 index 0000000..838bc81 --- /dev/null +++ b/addons/fontawesome/fonts/fa-solid-900.woff2.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://bkqnxsphaabhw" +path="res://.godot/imported/fa-solid-900.woff2-a9219e5bf1517e35af668434330a4deb.fontdata" + +[deps] + +source_file="res://addons/fontawesome/fonts/fa-solid-900.woff2" +dest_files=["res://.godot/imported/fa-solid-900.woff2-a9219e5bf1517e35af668434330a4deb.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/addons/fontawesome/plugin.cfg b/addons/fontawesome/plugin.cfg new file mode 100644 index 0000000..4cdc008 --- /dev/null +++ b/addons/fontawesome/plugin.cfg @@ -0,0 +1,6 @@ +[plugin] +name="FontAwesome" +description="FontAwesome 6 Icons" +author="LetterN" +version="6.3.0" +script="plugin.gd" diff --git a/addons/fontawesome/plugin.gd b/addons/fontawesome/plugin.gd new file mode 100644 index 0000000..da01422 --- /dev/null +++ b/addons/fontawesome/plugin.gd @@ -0,0 +1,8 @@ +@tool +extends EditorPlugin + +func _enter_tree(): + add_custom_type("FontAwesome", "Label", preload("res://addons/fontawesome/FontAwesome.gd"), preload("res://addons/fontawesome/flag-solid.svg")) + +func _exit_tree(): + remove_custom_type("FontAwesome") diff --git a/addons/simple-state/classes/animation_state.gd b/addons/simple-state/classes/animation_state.gd deleted file mode 100644 index cd3686c..0000000 --- a/addons/simple-state/classes/animation_state.gd +++ /dev/null @@ -1,47 +0,0 @@ -@icon("../icons/animation_state.png") -class_name AnimationState -extends State - -## Plays an animation from the linked [member animation_player]. -## The name of the animation to be played comes from the name of the node. - -## Emitted when the animation started by this state has finished playing. -signal animation_finished - - -@export_range(0, 20, 1, "or_greater") -## How many times to play before emitting [signal State.choose_new_substate_requested]. -## [b]If set to zero, it will go forever.[/b] -var loops := 0 - - -var _loops_left := 0 - - -func _init() -> void: - set_meta(&"description", "Plays the named animation from the linked AnimationPlayer.") - - -func _on_animation_finished(animation_name: StringName) -> void: - if animation_name != name: return - if loops == 0: - animation_player.play(name) - elif _loops_left <= 0: - choose_new_substate_requested.emit() - else: - _loops_left -= 1 - animation_player.play(name) - - -func enter(set_target: Node, set_animation_player: AnimationPlayer, set_debug_mode := false) -> void: - super(set_target, set_animation_player, set_debug_mode) - assert(animation_player != null, "AnimationPlayer must be set, either directly or by an ancestor.") - animation_player.animation_finished.connect(_on_animation_finished) - _loops_left = loops - 1 - animation_player.play(name) - - -func exit() -> void: - super() - animation_player.animation_finished.disconnect(_on_animation_finished) - animation_player.stop() diff --git a/addons/simple-state/classes/debugger.gd b/addons/simple-state/classes/debugger.gd deleted file mode 100644 index 9c3c9de..0000000 --- a/addons/simple-state/classes/debugger.gd +++ /dev/null @@ -1,139 +0,0 @@ -@icon("../icons/state_machine_debugger.png") -class_name StateMachineDebugger -extends Tree - - -## Displays an interactive state tree. -# This source code is a mess, I'm trying to make it less so. - - -@export -## Root state machine to reference. -var state_machine_root : State: - set(value): - state_machine_root = value - _setup_tree() - -@export -## What color to make the item when a state is active. -var active_color := Color.FOREST_GREEN - -@export -## Forcefully switch states by double-clicking them. -## Due to its nature, it has the potential to be destructive -## and/ or not behave completely how one might expect. -var allow_state_switching := false: - set(value): - allow_state_switching = value - if allow_state_switching: - item_activated.connect(_on_item_activated) - else: - item_activated.disconnect(_on_item_activated) - - -@export_group("Signals", "signal_") -@export -## Show when a state emits a relevant signal. -var signal_show := false: - set(value): - signal_show = value - - if state_machine_root == null: - return - - if signal_show: - connect_signals() - else: - disconnect_signals() - -@export -## Which signals to connect to on each state, as long as they exist. -var signal_connections : Array[StringName] = [ - &"entered", - &"exited", - &"choose_new_substate_requested", - &"animation_finished", -] - -@export -## Delay before hiding signal. -var signal_hide_delay := 1.0 - - -func _init() -> void: - columns = 2 - - -func change_state_by_path(path: NodePath) -> void: - if not state_machine_root.has_node(path): - return - var state := state_machine_root - for i in path.get_name_count(): - var part := path.get_name(i) - state = await state.change_state_name(part) - - -func connect_signals(state := state_machine_root) -> void: - if not state.has_meta(&"tree_item"): - return - for signal_name in signal_connections: - if state.has_signal(signal_name) and not \ - state.is_connected(signal_name, _on_state_signal): - state.connect(signal_name, _on_state_signal.bind(signal_name, state.get_meta(&"tree_item"))) - for child in(state.get_children() as Array[State]): - connect_signals(child) - - -func disconnect_signals(state := state_machine_root) -> void: - for signal_name in signal_connections: - if state.has_signal(signal_name) and \ - state.is_connected(signal_name, _on_state_signal): - state.disconnect(signal_name, _on_state_signal) - for child in (state.get_children() as Array[State]): - disconnect_signals(child) - - -func _setup_tree(state := state_machine_root, parent_item: TreeItem = null) -> void: - if state == state_machine_root: - if get_root() != null: - disconnect_signals() - clear() - if state_machine_root == null: - return -# state.print_tree_pretty() - - # TODO: add icons - var item := create_item(parent_item) - item.set_text(0, state.name) - item.set_metadata(0, state) - state.set_meta(&"tree_item", item) - connect_signals(state) - - for child in (state.get_children() as Array[State]): - _setup_tree(child, item) - - -func _on_item_activated() -> void: - change_state_by_path(state_machine_root.get_path_to( - get_selected().get_metadata(0) as State)) - - -func _on_state_signal(signal_name: StringName, state_item: TreeItem) -> void: - match signal_name: - &"entered": - for i in columns: - state_item.set_custom_color(i, active_color) - &"exited": - for i in columns: - state_item.clear_custom_color(i) - - if not signal_show: - return - - state_item.set_text(1, signal_name) - var timer := state_item.get_metadata(1) as SceneTreeTimer - if timer != null: - timer.timeout.disconnect(state_item.set_text) - timer = get_tree().create_timer(signal_hide_delay) - timer.timeout.connect(state_item.set_text.bind(1, "")) - state_item.set_metadata(1, timer) diff --git a/addons/simple-state/classes/random_state.gd b/addons/simple-state/classes/random_state.gd deleted file mode 100644 index 1e6cbea..0000000 --- a/addons/simple-state/classes/random_state.gd +++ /dev/null @@ -1,34 +0,0 @@ -@icon("../icons/random_state.png") -class_name RandomState -extends State - -## Activates a random one of its substates. -## Useful in conjuction with [AnimationState] for random idles. - - -@export -## When one of its children asks for a state change, -## instead of picking another one itself, it defers that choice to its parent. -## Allows for nested random states for finer control over flow and probability. -var defer_choice := false - - -func _init() -> void: - set_meta(&"description", "Pseudo-randomly picks a state to start.") - - -func _ready() -> void: - randomize() - super() - - -# You can define which state is picked automatically (like on enter). -# If you would like to call it yourself, use the public version (choose_substate). -func _choose_substate() -> State: - if get_child_count() == 0: - return null - if defer_choice and _active_substate != null: - choose_new_substate_requested.emit() - return null - return get_child(randi() % get_child_count()) as State - diff --git a/addons/simple-state/classes/sequence_state.gd b/addons/simple-state/classes/sequence_state.gd deleted file mode 100644 index 6e7f35b..0000000 --- a/addons/simple-state/classes/sequence_state.gd +++ /dev/null @@ -1,43 +0,0 @@ -@icon("../icons/sequence_state.png") -class_name SequenceState -extends State - - -## Executes its children in order, one after the other. Like an [Array] in [State] form! - - -@export_range(0, 20, 1, "or_greater") -## How many times the sequence should be looped through before emitting [signal State.choose_new_substate_requested]. -## [b]If set to zero, it will go forever.[/b] -var loops := 1 - - -var _loops_left := 0 - - -func _init() -> void: - set_meta(&"description", "Starts its children one after the other in order, \ - waiting for each one to be done before starting the next.") - - -# You can define which state is picked automatically (like on [method enter]). -# If you would like to call it yourself, use the public version ([method choose_substate]). -func _choose_substate() -> State: - if _active_substate == null: - return get_child(0) as State if get_child_count() > 0 else null - - if _active_substate.get_index() == get_child_count() - 1: - if loops == 0: - return get_child(0) as State - elif _loops_left == 0: - choose_new_substate_requested.emit() - return null - else: - _loops_left -= 1 - return get_child(0) as State - return get_child(_active_substate.get_index() + 1) as State - - -func enter(set_target: Node, set_animation_player: AnimationPlayer, set_debug := false) -> void: - super(set_target, set_animation_player, set_debug) - _loops_left = loops - 1 diff --git a/addons/simple-state/classes/state.gd b/addons/simple-state/classes/state.gd deleted file mode 100644 index ef11ac2..0000000 --- a/addons/simple-state/classes/state.gd +++ /dev/null @@ -1,291 +0,0 @@ -@icon("../icons/state.png") -class_name State -extends Node - -## The bare, basic state. Use it if you want total control over the state-flow. -## -## Properties marked as [b](inherited)[/b] are passed to substates, -## meaning you don't have to set it on each individual state, only the root. -## You can override it of course, and that will be passed to all of [i]its[/i] children. - - -## Emitted between [method _enter] and [method _after_enter]. -signal entered - -## Emitted after [method _exit]. -signal exited - -## Emitted between [method _update] and [method _after_update] -signal updated - -## Switched active substates. -signal active_substate_changed(new: State, old: State) - -## A request for the parent to pick a new substate to activate. -## Mainly used by children of [RandomState], such as an [AnimationState]. -signal choose_new_substate_requested - - -## Active or not. -enum Status { - INACTIVE, ## Inactive - ACTIVE, ## Active - } - - -@export -## The node that the states will act upon. [b](inherited)[/b] -## Doesn't actually get used in the addon scripts, it's just -## included for your convenience when scripting your own behaviour. -var target: Node: - set(value): - target = value - if _active_substate != null: - _active_substate.target = target - -@export -## Where to play animations from. [b](inherited)[/b] -var animation_player: AnimationPlayer - -@export_range(0, 120, 1, "or_greater") -## How many seconds the state should be active before emitting [signal choose_new_substate_requested]. -## [b]If set to zero, it will go forever.[/b] -var timer := 0.0 - -@export -## Whether to force-restart the chosen substate in the callback for [signal choose_new_substate_requested] if it was already active. -var force := true - -@export -## The state will not be activated under any circumstances. -var disabled := false: - set(value): - disabled = value - var root := is_root() - if root and not disabled: - enter(target, animation_player, debug_mode) - elif status == Status.ACTIVE: - exit() - -@export -## Print a message avery time there is a state change. [b](inherited)[/b] -var debug_mode := false: - set(value): - debug_mode = value - if _active_substate != null: - _active_substate.debug_mode = debug_mode - -## The status of this state, ie. whether it's running or not. -var status := Status.INACTIVE - - -# The substate that is currently active, if any. -var _active_substate: State: - set(value): - if _active_substate != null: - _active_substate.choose_new_substate_requested.disconnect(_on_choose_new_substate_requested) - active_substate_changed.emit(value, _active_substate) - _active_substate = value - if _active_substate != null: - _active_substate.choose_new_substate_requested.connect(_on_choose_new_substate_requested) - -# If a timer is set, the object will be stored here. -var _timer_object: SceneTreeTimer - - -######################### -### VIRTUAL METHODS ### -######################### -func _init() -> void: - set_physics_process(false) - set_meta(&"description", "A bare, basic state - will only ever automatically start its first child.") - - -func _ready() -> void: - for child in get_children(): - assert(child is State, "A State should not have any children that are not other States.") - if is_root() and not disabled: - enter(target, animation_player, debug_mode) - - -func _physics_process(delta: float) -> void: - if status == Status.INACTIVE: - set_physics_process(false) - return - update(delta) - - -## [b][parents, then children][/b] Called when the state is activated. -func _enter() -> void: - pass - - -## [b][children, then parents][/b] Called after the state is activated. -func _after_enter() -> void: - pass - - -## [b][parents, then children][/b] Called every physics frame (only when the state is active, of course). -func _update(delta: float) -> void: - pass - - -## [b][children, then parents][/b] Called at the end of every physics frame. -func _after_update(delta: float) -> void: - pass - - -## [b][parents, then children][/b] Called before the state is deactivated. -func _before_exit() -> void: - pass - - -## [b][children, then parents][/b] Called when the state is deactivated. -func _exit() -> void: - pass - - -## You can define which state is picked automatically (like on [method enter]). -## Return `null` to not change substate at all. -## If you would like to call it yourself, use the public version ([method choose_substate]). -func _choose_substate() -> State: - return get_child(0) as State if get_child_count() > 0 else null - - -######################## -### PUBLIC METHODS ### -######################## - -## Switch to the specified substate by name. It is just a shortcut to [method change_state_node]. -func change_state_name(name: String, force := false) -> State: - return await change_state_node(get_node_or_null(name) as State, force) - - -## Switch to the specified substate by node. If it is not a direct child, nothing will happen. -## If `force`, it will start a state again even if it's already running. -## It waits for the next [signal updated] to make sure it's not -## switching all over the place in one tick. -func change_state_node(node: State, force := false) -> State: - await updated - if ( - node == null - or node.disabled - or (node.status != Status.INACTIVE and not force) - or node.get_parent() != self - ): - return node - - var old := _active_substate - _active_substate = node - if old != null: - old.exit() - _active_substate.enter(target, animation_player, debug_mode) - - if debug_mode: - print( - ("FORCE " if force else "") + - "STATE: " + - str(get_root().get_parent().get_path_to(_active_substate)) - ) - return _active_substate - - -## Return the currently active substate, if any. -func get_active_substate() -> State: - return _active_substate - - -## Public [method _choose_substate]. -func choose_substate() -> State: - return _choose_substate() - - -## Shortcut for `change_state_node(choose_substate())`. -func change_to_next_substate(force := false) -> void: - await change_state_node(choose_substate(), force) - - -## Whether this state is the root of the state tree, -## ie. it is the common ancestor of all the others. -func is_root() -> bool: - # If your parent is not a state, then you are the root. - return not get_parent() is State - - -## Get the root state. -func get_root() -> State: - var node: State = self - while not node.is_root(): - node = node.get_parent() as State - return node - - -## Runs [method _enter] and [method _after_enter], -## not a good idea to call it yourself unless you really know what you're doing. -func enter(set_target: Node, set_animation_player: AnimationPlayer, set_debug_mode: bool) -> void: - for child in get_children(): - assert(child is State, "A State should not have any children that are not other States.") - - _enter() - entered.emit() - status = Status.ACTIVE - if timer != 0: - _timer_object = get_tree().create_timer(timer) - _timer_object.timeout.connect(_on_timer_timeout) - set_physics_process(is_root()) - - # Only set them if they're not being overridden - if target == null: - target = set_target - if animation_player == null: - animation_player = set_animation_player - if debug_mode == false: - debug_mode = set_debug_mode - - change_to_next_substate() - _after_enter() - - -## Runs [method _update] and [method _after_update], -## not a good idea to call it yourself unless you really know what you're doing. -func update(delta: float) -> void: - _update(delta) - updated.emit() - if _active_substate != null: - _active_substate.update(delta) - _after_update(delta) - - -## Runs [method _exit] and [method _before_exit], -## not a good idea to call it yourself unless you really know what you're doing. -func exit() -> void: - _before_exit() - status = Status.INACTIVE - if _active_substate != null: - _active_substate.exit() - _active_substate = null - - if is_instance_valid(_timer_object): - _timer_object.timeout.disconnect(_on_timer_timeout) - _timer_object = null - - _exit() - exited.emit() - set_physics_process(false) - - -######################### -### PRIVATE METHODS ### -######################### - - -################# -### CALLBACKS ### -################# - -func _on_choose_new_substate_requested() -> void: - change_to_next_substate(force) - - -func _on_timer_timeout() -> void: - choose_new_substate_requested.emit() diff --git a/addons/simple-state/demo/demo.gd b/addons/simple-state/demo/demo.gd deleted file mode 100644 index 47aaa01..0000000 --- a/addons/simple-state/demo/demo.gd +++ /dev/null @@ -1,14 +0,0 @@ -extends State - - -const NEXT_STATE_ACTION = "demo_next_state" - - -func _enter() -> void: - if InputMap.has_action(NEXT_STATE_ACTION): - return - var input_event := InputEventKey.new() - input_event.keycode = KEY_TAB - - InputMap.add_action(NEXT_STATE_ACTION) - InputMap.action_add_event(NEXT_STATE_ACTION, input_event) diff --git a/addons/simple-state/demo/demo.tscn b/addons/simple-state/demo/demo.tscn deleted file mode 100644 index e3fe0e2..0000000 --- a/addons/simple-state/demo/demo.tscn +++ /dev/null @@ -1,218 +0,0 @@ -[gd_scene load_steps=17 format=3 uid="uid://clnliyc6fmqy6"] - -[ext_resource type="Script" path="res://addons/simple-state/classes/debugger.gd" id="1_rqf1w"] -[ext_resource type="Script" path="res://addons/simple-state/demo/description_box.gd" id="2_gktik"] -[ext_resource type="Script" path="res://addons/simple-state/classes/sequence_state.gd" id="3_4afa7"] -[ext_resource type="Script" path="res://addons/simple-state/demo/demo.gd" id="3_x0hcs"] -[ext_resource type="Script" path="res://addons/simple-state/classes/random_state.gd" id="4_wxjoe"] -[ext_resource type="Script" path="res://addons/simple-state/demo/emit_next.gd" id="6_kxcgl"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ysqm7"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_wxupu"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7gdgn"] -draw_center = false -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 - -[sub_resource type="Animation" id="Animation_5pgem"] -resource_name = "RESET" -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("ColorRect:color") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 1, 1)] -} - -[sub_resource type="Animation" id="Animation_mwhj1"] -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("ColorRect:color") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(0, 0, 0, 1)] -} - -[sub_resource type="Animation" id="Animation_yyph0"] -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("ColorRect:color") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(0, 0, 1, 1)] -} - -[sub_resource type="Animation" id="Animation_xmkhy"] -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("ColorRect:color") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(0, 1, 0, 1)] -} - -[sub_resource type="Animation" id="Animation_4pwkk"] -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("ColorRect:color") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 0, 0, 1)] -} - -[sub_resource type="Animation" id="Animation_gt7hj"] -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("ColorRect:color") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 0, 1)] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_01hf1"] -_data = { -"RESET": SubResource("Animation_5pgem"), -"black": SubResource("Animation_mwhj1"), -"blue": SubResource("Animation_yyph0"), -"green": SubResource("Animation_xmkhy"), -"red": SubResource("Animation_4pwkk"), -"yellow": SubResource("Animation_gt7hj") -} - -[node name="SimpleStateDemo" type="Panel"] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="MarginContainer" type="MarginContainer" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_constants/margin_left = 10 -theme_override_constants/margin_top = 10 -theme_override_constants/margin_right = 10 -theme_override_constants/margin_bottom = 10 - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] -layout_mode = 2 -theme_override_constants/separation = 10 - -[node name="StateMachineDebugger" type="Tree" parent="MarginContainer/HBoxContainer" node_paths=PackedStringArray("state_machine_root")] -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_constants/relationship_line_width = 2 -theme_override_constants/draw_guides = 0 -theme_override_styles/panel = SubResource("StyleBoxEmpty_ysqm7") -theme_override_styles/focus = SubResource("StyleBoxEmpty_wxupu") -theme_override_styles/selected = SubResource("StyleBoxFlat_7gdgn") -theme_override_styles/selected_focus = SubResource("StyleBoxFlat_7gdgn") -select_mode = 1 -script = ExtResource("1_rqf1w") -state_machine_root = NodePath("../../Root") -allow_state_switching = true -signal_show = true - -[node name="DescriptionBox" type="Label" parent="MarginContainer/HBoxContainer" node_paths=PackedStringArray("tree")] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 1 -autowrap_mode = 3 -script = ExtResource("2_gktik") -tree = NodePath("../StateMachineDebugger") -show_descriptions = 2 - -[node name="InputInfo" type="Label" parent="MarginContainer/HBoxContainer/DescriptionBox"] -layout_mode = 1 -anchors_preset = 3 -anchor_left = 1.0 -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = -349.0 -offset_top = -78.0 -grow_horizontal = 0 -grow_vertical = 0 -text = "MOUSE CLICK on state: select -DOUBLE MOUSE CLICK on state: start -TAB: next substate (only has effect on leaves)" -horizontal_alignment = 2 -vertical_alignment = 2 - -[node name="ColorRect" type="ColorRect" parent="MarginContainer"] -custom_minimum_size = Vector2(50, 50) -layout_mode = 2 -size_flags_horizontal = 0 -size_flags_vertical = 8 - -[node name="AnimationPlayer" type="AnimationPlayer" parent="MarginContainer"] -libraries = { -"": SubResource("AnimationLibrary_01hf1") -} - -[node name="Root" type="Node" parent="MarginContainer" node_paths=PackedStringArray("target", "animation_player")] -script = ExtResource("3_x0hcs") -target = NodePath("") -animation_player = NodePath("../AnimationPlayer") - -[node name="SequenceState" type="Node" parent="MarginContainer/Root"] -script = ExtResource("3_4afa7") - -[node name="RandomState" type="Node" parent="MarginContainer/Root/SequenceState"] -script = ExtResource("4_wxjoe") -defer_choice = true - -[node name="red" type="Node" parent="MarginContainer/Root/SequenceState/RandomState"] -script = ExtResource("6_kxcgl") - -[node name="yellow" type="Node" parent="MarginContainer/Root/SequenceState/RandomState"] -script = ExtResource("6_kxcgl") - -[node name="green" type="Node" parent="MarginContainer/Root/SequenceState"] -script = ExtResource("6_kxcgl") - -[node name="blue" type="Node" parent="MarginContainer/Root/SequenceState"] -script = ExtResource("6_kxcgl") - -[node name="black" type="Node" parent="MarginContainer/Root"] -script = ExtResource("6_kxcgl") -timer = 1.0 -metadata/description = "Will never start automatically, due to its parent being only a normal state." diff --git a/addons/simple-state/demo/description_box.gd b/addons/simple-state/demo/description_box.gd deleted file mode 100644 index d175105..0000000 --- a/addons/simple-state/demo/description_box.gd +++ /dev/null @@ -1,98 +0,0 @@ -extends Label - - -## Mode of description box rendering. -enum DisplayModes { - NONE, ## Description box completely hidden. - ACTIVE, ## Show descriptions of all active states. - SELECTION, ## Show description of last selected state (also includes manual switches). - } - - -@export -## [StateMachineDebugger] to reference. -var tree : StateMachineDebugger: - set(value): - tree = value - if show_descriptions == DisplayModes.SELECTION and \ - not tree.item_selected.is_connected(_on_tree_item_selected): - tree.item_selected.connect(_on_tree_item_selected) - - -@export -## Show a description of a state. -## Looks for a string metadata value by the name of [code]description[/code] on each state. -var show_descriptions := DisplayModes.NONE: - set(value): - show_descriptions = value - - match show_descriptions: - DisplayModes.NONE: - visible = false - DisplayModes.ACTIVE: - visible = true - if not is_instance_valid(tree): - return - if tree.item_selected.is_connected(_on_tree_item_selected): - tree.item_selected.disconnect(_on_tree_item_selected) - DisplayModes.SELECTION: - visible = true - if not is_instance_valid(tree): - return - if not tree.item_selected.is_connected(_on_tree_item_selected): - tree.item_selected.connect(_on_tree_item_selected) - - -var _active_states : Array[State] = [] - - -# Called when the node enters the scene tree for the first time. -func _ready() -> void: - visible = show_descriptions != DisplayModes.NONE - connect_signals() - - -func connect_signals(state := tree.state_machine_root) -> void: - if not state.has_meta(&"tree_item"): - return - for signal_name in tree.signal_connections: - if state.has_signal(signal_name) and not \ - state.is_connected(signal_name, _on_state_signal): - state.connect(signal_name, _on_state_signal.bind(signal_name, state)) - for child in(state.get_children() as Array[State]): - connect_signals(child) - - -func disconnect_signals(state := tree.state_machine_root) -> void: - for signal_name in tree.signal_connections: - if state.has_signal(signal_name) and \ - state.is_connected(signal_name, _on_state_signal): - state.disconnect(signal_name, _on_state_signal) - for child in (state.get_children() as Array[State]): - disconnect_signals(child) - - -func _set_description_from_active_states() -> void: - text = "" - for state in _active_states: - text += ("" if state.is_root() else "\n\n") + \ - state.name as String + \ - ": " + \ - state.get_meta(&"description", "") as String - - -func _on_tree_item_selected() -> void: - text = tree.get_selected() \ - .get_metadata(0).get_meta(&"description", "") - - -func _on_state_signal(signal_name: StringName, state: State) -> void: - match signal_name: - &"entered": - if show_descriptions == DisplayModes.ACTIVE: - _active_states.push_back(state) - _set_description_from_active_states() - &"exited": - if show_descriptions == DisplayModes.ACTIVE: - _active_states.pop_back() - _set_description_from_active_states() diff --git a/addons/simple-state/demo/emit_next.gd b/addons/simple-state/demo/emit_next.gd deleted file mode 100644 index 255bf28..0000000 --- a/addons/simple-state/demo/emit_next.gd +++ /dev/null @@ -1,6 +0,0 @@ -extends AnimationState - - -func _update(_delta: float) -> void: - if Input.is_action_just_pressed(get_root().NEXT_STATE_ACTION): - choose_new_substate_requested.emit() diff --git a/addons/simple-state/icons/animation_state.png b/addons/simple-state/icons/animation_state.png deleted file mode 100644 index 6e4530c884b6ff39a231a600bdbfbdfee3a12e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2901 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 diff --git a/addons/simple-state/icons/sequence_state.png b/addons/simple-state/icons/sequence_state.png deleted file mode 100644 index 0d0f4553362750b90fd69ede61b40768020a8f07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf66p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>dx@v7EBkXsK`{l>lV_Gs z1`73fx;TbtoZmaamd`O!!1es^d)o6_I{cKi)_SOzEm|zn`8T3fRwLwyUB;EHuEjr` z_Q(eo=9i|wJ9CHUkBsNegq4z6Z9#1%@oB4bstdC1SMi*XyjZzg(84(VY?t>PgU_$- zMmMgKo-Nei5H;IG-9gDj;+GMyV6pM24La&d3-3M~O+^>6duuJ8ZFESGRKSjxim zGss=4C9V-ADTyViR>?)FK#IZ0z{p6~&`8(FAjH7T%Gkil#6sJ^z{ -- state_machine_debugger.png (tinted) diff --git a/addons/simple-state/icons/state.png b/addons/simple-state/icons/state.png deleted file mode 100644 index 4d22ed7cfd52886555afbaa6fb38750b749096fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 572 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf66p}rHd>I(3)EF2VS{N990fib~ zFff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W>dx@v7EBkXsK`}*+j{Ua| zGcYhJc)B=-Xq-=-xL>=4QR2A$``dFR_?GfKvT_xZo*64CVkqG|>7diiB|U7Z2A|k9 z9{UCvb+rfyAJ$zY(;a93?p!TT-}kA{CFiC8sGI-(@^|S88p729^A&&Gb~vE3*fVI= zIj_s^{FzG68ja=t?o>=Vr~7{GkIW~tL!b9NJ;L`r^zVnGn^viB`+rJm*SfH~rFSIz zLu-pP*uGS)7RwR5u2cDHnXuWc!jr7C3(uUGb@^*NTkhK8_FD5IlO=8rGp!lAVlKG# zF}zs9$QdlN(W|T2>DS50=?%_lCk$K+A@Cq`|4vMti{2WN`Lgw&a7t6~a0RcD_3-n&QJ?5FxZ1-3u^QV+Ow-`yAJ zU8@faD+bjP*NBpo#FA921GbWnhrm_}dvp zLvDUbW?Cg~4H9>p{{uB>z-=hW%uOvWNz5$(=`q$dFw`|P4>2;bGB&m{fLc-~$qb5O N22WQ%mvv4FO#tmo(!Brx diff --git a/addons/simple-state/icons/state_fullsize.png b/addons/simple-state/icons/state_fullsize.png deleted file mode 100644 index 4f5f80dd5107eaf73379ca0cb84c4f4b518a67e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 767 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!SkfJR9T^xl_SO6joDAff1^9%x z{wDnEhhs5Q<$fVV@O2n z)9DwtEmh!XyE}F1%DEN)r^{;doY-*frugP-JmJ-$HB5)r-~LmR`D{M}!+~&y51APP za*PIRUt7IyQD<0EYP?uTjr85Mns!`+9GtVgZALlxVpv3tK}%X}Kv2Q^WN|`E3a&>N9_9D~d3*w13?y zaHjhIZvn0ak^93q*cr||yA?*IHA z^X0S;zq=m$nW$LJ-WV$MEakgxV&welZPQP8Y}NTKko2xaW7;wC=kr`y0>rI13SBw( zyI4qvC4gMkXjsG9>ql;|Ups12Da+)Q ztTWyB#JPi|SB#Gzc98tuu(@IFOZ`}bFIN;zlyg4Wh}brWEPkB$O!%GhvYiY+9`smn zmo8Me*?nyKo0cDS5)RMqtrgeSQskfS$T-E)X0P=by=)c!Gh((Y7y^GxKB6Wlnf6tw z>C6U0x9W)}DpE?Ln~y2hM_De*W869~Y+DQ416Pja71|A}xWs3#$efxTSE}Pxe{Bob z0?9+|KeNq4FRbVG7V=unxTW_-U);x~W#PwqXY5ISdcrsMRZzXQ~xqI*!L`c W|Af7KLp?D4F?hQAxvXBxjHS diff --git a/addons/simple-state/icons/state_machine_debugger.png b/addons/simple-state/icons/state_machine_debugger.png deleted file mode 100644 index e226db77d5dc5b56abad0f0d13bcbc89c67709e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=IjczVPIhF5AX?b1uCe&KY#MqNqz69_r0Id_hDwws~MC2 zPn!L=um8ie-uKhHp3Ut0FunI3P-;fcyBR%ir}w;@{-5E0$N!Ec9~Sh#pFa2h-0siQ zkN!W}{;hBFm#NJkdiy?3>v=z|@9p%ychh>`P3wCHG#LYZKoRLh;`V-+fvLXxEkY3F z7?^=T2f*2Aj7eW+qKOd0?FV}HJqY!EoQhRFNQ!8Lskk5EyBQ!^VEBNnn*}6+ap7O> zEDofaOM?7B(MbSk^=R^J*~}w(`-TK_`?s}h>~dzV3)ERtZtmljzdDJ@_v2;5tS3Gy zj9lvsq|d*}34iHlvHP*L?71au9Q;f|wt-6f|E94uNQFF#`8_@A$J>X|R{8SVrbSM+ zWS&*PufUVX^fcBW9_R+fByV>Yh7ML)4r>`sfb4Eci zMaGZGN$EhL*PbqpArhC96BwA>)Y8Pl(#*=(Bpy5n2?`5)_^6HBVD&0f^VQiO6j)5Q z&YHcobVg!LoLsE!-!x`tJB|7A2Tt5La>eKN9LZHK7YLJU20a{_Lr^NSdgXsrhpeLy>mV z`6-!cm6#d~4ImoM3JL82YS4h&P?DLOT3nKtTY%7G9%5u void: - add_custom_type("State", "Node", State, placeholder_texture) - add_custom_type("RandomState", "Node", RandomState, placeholder_texture) - add_custom_type("AnimationState", "Node", AnimationState, placeholder_texture) - add_custom_type("SequenceState", "Node", SequenceState, placeholder_texture) - add_custom_type("StateMachineDebugger", "Tree", StateMachineDebugger, placeholder_texture) - - -func _exit_tree() -> void: - remove_custom_type("State") - remove_custom_type("RandomState") - remove_custom_type("AnimationState") - remove_custom_type("SequenceState") - remove_custom_type("StateMachineDebugger") diff --git a/addons/simple-state/templates/State/empty_state.gd b/addons/simple-state/templates/State/empty_state.gd deleted file mode 100644 index 132b1c4..0000000 --- a/addons/simple-state/templates/State/empty_state.gd +++ /dev/null @@ -1,33 +0,0 @@ -# meta-default: true -extends _BASE_ - - -# Called when the state is activated. (parents, then children) -func _enter() -> void: - pass - - -# Called after the state is activated. (children, then parents) -func _after_enter() -> void: - pass - - -# Called every physics frame (only when the state is active, of course). (parents, then children) -func _update(delta: float) -> void: - pass - - -# Called at the end of every physics frame. (children, then parents) -func _after_update(delta: float) -> void: - pass - - -# Called before the state is deactivated. (parents, then children) -func _before_exit() -> void: - pass - - -# Called when the state is deactivated. (children, then parents) -func _exit() -> void: - pass - diff --git a/addons/yet_another_behavior_tree/LICENSE.md b/addons/yet_another_behavior_tree/LICENSE.md new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/addons/yet_another_behavior_tree/LICENSE.md @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/addons/yet_another_behavior_tree/plugin.cfg b/addons/yet_another_behavior_tree/plugin.cfg new file mode 100644 index 0000000..269d32a --- /dev/null +++ b/addons/yet_another_behavior_tree/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Yet Another Behavior Tree" +description="A Behavior Tree implementation for Godot Engine" +author="Adrien Quillet" +version="3.0.0" +script="yet_another_behavior_tree.gd" diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/Icons.pdn b/addons/yet_another_behavior_tree/src/Assets/Icons/Icons.pdn new file mode 100644 index 0000000000000000000000000000000000000000..22a75da373758769aa30df81f16f303efa0d85b0 GIT binary patch literal 11229 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 literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btaction.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btaction.png new file mode 100644 index 0000000000000000000000000000000000000000..c8a9c0be61ca252ba2ed6278961724cd99821886 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}N0G|+7ApI^m=tFJ(=V@J^x@!Ob|NraKxet|D|9<`awr<(G^zc8=9)Id- z_<8d1`@*EpGkX8Lc=kR&{>$9S-!`szpA+-%&z~Rrcld zL>4nJ@ErzW#^d=bQhLoCkC{H!PC{xWt~$(698+UdA|Sv literal 0 HcmV?d00001 diff --git a/addons/simple-state/icons/animation_state.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btaction.png.import similarity index 65% rename from addons/simple-state/icons/animation_state.png.import rename to addons/yet_another_behavior_tree/src/Assets/Icons/btaction.png.import index 4b338d3..536efe2 100644 --- a/addons/simple-state/icons/animation_state.png.import +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btaction.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://cna1s8hi8xc58" -path="res://.godot/imported/animation_state.png-5f10255295e45d80e555d2885de83e22.ctex" +uid="uid://b48sosvxi4n24" +path="res://.godot/imported/btaction.png-18977c497a76704723d083978b2ea595.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/simple-state/icons/animation_state.png" -dest_files=["res://.godot/imported/animation_state.png-5f10255295e45d80e555d2885de83e22.ctex"] +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btaction.png" +dest_files=["res://.godot/imported/btaction.png-18977c497a76704723d083978b2ea595.ctex"] [params] diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboarddelete.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboarddelete.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdc4c0b1b40711f7a2179089871364e380c4019 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}x0G|+7ApI^m=uJ|<>Hxi3XVD5Lp&EBd0Re%>k00CE*o1_Hynp}x)2B~g zzI@@};Arqwc#-J$GS2!FP#b4~M`SSr1K(i~W;~w1A_XXz>gnPbq7j_i7tPmTz`+uJ z`j*q{$N!d#1}^SB$IdC7aB%v<$KgGm5*|{{Dn(XR`kE~U;;dUzyf}oyLRUBLVO?W- zIQoUn?`z66_qOLL#&n&Jj$F4`ZnxaVxN|q&R_1VD{HSi#AlvnenK^0eXE~sS44$rj JF6*2UngAV;U9$iH literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboarddelete.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboarddelete.png.import new file mode 100644 index 0000000..f3b65be --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboarddelete.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbnehk2kgxha0" +path="res://.godot/imported/btactionblackboarddelete.png-e03a9a160a95593083f9e35e81bdc103.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboarddelete.png" +dest_files=["res://.godot/imported/btactionblackboarddelete.png-e03a9a160a95593083f9e35e81bdc103.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboardset.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboardset.png new file mode 100644 index 0000000000000000000000000000000000000000..6978498f0661a20ae266357e0905d086c13d4091 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}-0G|+7ApI^m=uJ|<>Hxi3XVD5Lp_zrgo2ORIDG5BcYvuFj&*#sdzj*QD zPj6rF@bGYOa6Eqe*ulZ!%=V@K|Nm!UVR3PBnLd4bK|#TbM8BhEe6m2}I14-?iy0XB z4ude`@%$AjK*3B;7sn8d;M{Ys`5F{B91^)sZ1Q>g>bHF+SN7SbKOcU%E%Gov{A!C_ zr|O|NhDw9QLR=S8(sw_RHQ?mQW0g;06f=m9EB8$(k?Sis#JA=^@Q$W^3&T4e*G~KV pTjSMNS%Lh70G|+7ApI^m==0?E-?y%P>S_3W_tyXa|Ns5^`7SN&Q+NHZ>zDrh{{4OX z`hWlay-N%IP@Dhv?VES$;s5^p`SD#XVv0Q!*y`A5aPs~Y4xc_6dJ%^LEt&5@1Z=nto<_XmrOCo(`_%hsIE^x~A zUvQ^0V@sBG=e>HXgeNt#@*_6Ps&w7(a&8!V``Px#1ZP1_K>z@;j|==^1poj5Z%|BBMF0Q*?qgE!XIKCK|L<&E{q5}XhkEX1RQuoC z?{sAImWuuL^zeOe^{Jrw&dBtglK%Mj{qF4k_Vw_5ZurE#`OL@eYFhcq#PW-N{p{-W zpq2Hbng0F#_q?_E!Mpzb{P(!9{OjrPb!YtO=J>z3H})B)00009a7bBm000id000id z0mpBsWB>pFfJsC_R47wr&f5}#Fbo9Hu5GE8DuNNUS`qR8zmZf)W*GOar`b%*f3V0G zR)FOwIA0Y(Sa0Tu?XHT}#{EGmsE>`czC9_>xdXZj2}I9tT$@{*A(gNDqs~d-3Ap|R zg*fmfZ-h}QAYut0T?$7-&Lfr8Kj2nMJkJr(Ff3xs1g@h6utD7iE&u=k07*qoM6N<$ Ef=1h_)Bpeg literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btactionwait.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btactionwait.png.import new file mode 100644 index 0000000..848abfd --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btactionwait.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ct3k7bwcr4n23" +path="res://.godot/imported/btactionwait.png-35eefe67990a95ed2449e53d56e2cf8f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btactionwait.png" +dest_files=["res://.godot/imported/btactionwait.png-35eefe67990a95ed2449e53d56e2cf8f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btblackboard.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btblackboard.png new file mode 100644 index 0000000000000000000000000000000000000000..49cfc760d3765187f340fecc1fe21001335ad20d GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFFMGaB5^snf!WQ`K)@kMV|QCyn*^ievV{%;JSjVxLfRN47b>`E)Um}F##9@f ja4=@nDRX3CW@b3Jlec&8z4BE+Ll`_={an^LB{Ts5+JZI3 literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btblackboard.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btblackboard.png.import new file mode 100644 index 0000000..915becb --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btblackboard.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bc3t7dlq5ojd7" +path="res://.godot/imported/btblackboard.png-7f733cee4dbff616004368a725149731.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btblackboard.png" +dest_files=["res://.godot/imported/btblackboard.png-7f733cee4dbff616004368a725149731.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btcomposite.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btcomposite.png new file mode 100644 index 0000000000000000000000000000000000000000..0e938f2a9b65a3802ba741992605dd3ed492bb6c GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK{Zbo#}EtuWCc+Jrj054bX%MSZ01+Y;5?-w k)sv;b)|0h>F(HA0A+D2IrtZKapaup8Pgg&ebxsLQ0OgJ&=Kufz literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btcomposite.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btcomposite.png.import new file mode 100644 index 0000000..55f80a8 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btcomposite.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://61mky8di67wd" +path="res://.godot/imported/btcomposite.png-e026d4d004e93322dbcd1e6f926f41a2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btcomposite.png" +dest_files=["res://.godot/imported/btcomposite.png-e026d4d004e93322dbcd1e6f926f41a2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btcondition.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btcondition.png new file mode 100644 index 0000000000000000000000000000000000000000..0cca0b8ccb5c7854d9559feba230dcd0662ef80b GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}B0G|+7AbqV<;K4HQSBKkf&(Qz<<<+8>VmAD6Ic>;BE7I;J!GcfQS24TkI`72U@f}x%+jv*SsrDvo0 z8Web30=?cc*g1UPAGz`3GMByf&VC9lT<@ar}k z)*N`&IMMrS!0dky^WW@Z+bFY(?V31GYXQ@n8pe~##mD-A7BG0a`njxgN@xNAmpxNS%G}-0G|+7AbqV<;7Yr|!bHIuSHTJ=p_zrgo2ORIDG5BcYvuFj&*#sdzj*QD zPj6rF@bGYOa6Eqe*ulZ!%=V@K|Nm!UVR3PBnLd4bK|#UAR)NoszpH@8aTa()7BevL z9R^{>NS%LhJ0G|+7AbqV<;7Yr|!bHIuSHTJ=p_v6fyXLodMH_y8_v-)u|6S2WuU@@U zR#txb@?}FqgQKHkU0t1$l9Gssh^D6IojZ3#MMbr=v|il5ez8?x_kxZM6H7mcYh?k= zNS%Lh70G|+7AbqV<;L+NsuaA#ESmFQe*_r?U|Ns5{{aUx^gB5;X9vu4j=hvGP z6aW4Dcdc9G?p(`XpPpRr5&!r1_rJe??k{%xbbI@aez_lSZrq)3b9bK2$Ls4p-q`SD zQ_8C&9WVCP+~}8OsWe{%w1cz2BeIx*f$uN~Gak=hkpdJ<^K@|x(Fm?R6VBJ5AmAFf z!DizErEk0b$8z~O^mcwvJ~1aH;r@@+_8d;uwl0Q3zlAzXm?uF(HA0A)}jF#%wD~A5aH_r>mdKI;Vst0Ptud(*OVf literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btdecorator.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btdecorator.png.import new file mode 100644 index 0000000..71f4e9c --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btdecorator.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmwqhdcyhptro" +path="res://.godot/imported/btdecorator.png-8fdc93bf956127379273d9a2949c9c1c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btdecorator.png" +dest_files=["res://.godot/imported/btdecorator.png-8fdc93bf956127379273d9a2949c9c1c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btfailure.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btfailure.png new file mode 100644 index 0000000000000000000000000000000000000000..f6885087023d1c43f52edd55a0c1924459e67bde GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFmWISUjueh% z>|N6uuW)otZBuWOY?91v5^#GG!r{C{$5!ABhd)aei%~;VgH$8WR2N4_Lv;mbiImob g42Oa^5)v2~f|l`D-8TAZ477~F)78&qol`;+0L~gf@Bjb+ literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btfailure.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btfailure.png.import new file mode 100644 index 0000000..37fc346 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btfailure.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c73l5rvxyrnda" +path="res://.godot/imported/btfailure.png-43c62fa29ae4a153c528e033a8bbecc9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btfailure.png" +dest_files=["res://.godot/imported/btfailure.png-43c62fa29ae4a153c528e033a8bbecc9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btinverter.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btinverter.png new file mode 100644 index 0000000000000000000000000000000000000000..de30df74cf07d372af58949de14cbca2b9c1d062 GIT binary patch literal 501 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Li90X`wFK-$AM*WD-E*(1%>E7RFMRnO2>&&bW*CBe-*+ubL}*xXNE$v{QT z+|nk@#UtI#JIl#E)!aHnQQ1gdQQy$S%fcp9*TBWaGd(4vIUuxHQ^!tPR#RF=Q&31s zMo!zwEoH{+wcoz|*s|?#Zef>$OCl>P2NM%BAHS%LV@zGsjQ{`t-@Ns(Z{iXY3x6J7 zAx0)978W)WbN^Sb-{lwg7#MrXD(H$!Dhmlqb8_)%>pA)c75@42r@ncni)V(hnXit% zvzb-Uiq*T?I_G`<{I$5OKRvsxrG0L2MA@aq*RBG+$64SJS+Qm?GTd*pioH(rzS%7GCdKb| zgZ$g%fV(xSp$vKRfOEak7aXGnx v+0D^Fz#)l)Q;Unk=u%T-qBx6z0RzJoKepz8=Wp)=l`?p``njxgN@xNA4mc{G literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btlimiter.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btlimiter.png.import new file mode 100644 index 0000000..ad6ebfb --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btlimiter.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://byk2pkxf1m2xm" +path="res://.godot/imported/btlimiter.png-4154342ba1ecd7c753485e0c1895d99d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btlimiter.png" +dest_files=["res://.godot/imported/btlimiter.png-4154342ba1ecd7c753485e0c1895d99d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btnode.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btnode.png new file mode 100644 index 0000000000000000000000000000000000000000..7b10b335b897c35cba69334b9b3e8abfb4041159 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK{Zbo#}EtuWCc+Jri~|iZVT`^7N|K-F(HA0p?NN|jN-zopr0O6`5e*gdg literal 0 HcmV?d00001 diff --git a/addons/simple-state/icons/sequence_state.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btnode.png.import similarity index 66% rename from addons/simple-state/icons/sequence_state.png.import rename to addons/yet_another_behavior_tree/src/Assets/Icons/btnode.png.import index 8231c76..1969413 100644 --- a/addons/simple-state/icons/sequence_state.png.import +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btnode.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://bcviu3dccvvm2" -path="res://.godot/imported/sequence_state.png-4718f2c926301319d99a0ccd15ff62fb.ctex" +uid="uid://sccepp5a5goa" +path="res://.godot/imported/btnode.png-3ebad094cfaf4e989cef065b27b78174.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/simple-state/icons/sequence_state.png" -dest_files=["res://.godot/imported/sequence_state.png-4718f2c926301319d99a0ccd15ff62fb.ctex"] +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btnode.png" +dest_files=["res://.godot/imported/btnode.png-3ebad094cfaf4e989cef065b27b78174.ctex"] [params] diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btparallel.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btparallel.png new file mode 100644 index 0000000000000000000000000000000000000000..ca32a9c377a5d3c5f186bc3740914fb4c2ba08f9 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF|C(4?f?J(Pu{)AUeq*m|H_|9_f7&;a29w( z7BevL9R^{>rtc7VupB;%1<%tE(#<%CeAc9d{?= sloo@AQ;N45*%Z1JRx`eCVqjxq*nW(6vW8puDWDk)p00i_>zopr0NnvU;{X5v literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btparallel.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btparallel.png.import new file mode 100644 index 0000000..f5aeff4 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btparallel.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://i8yclvjdd2po" +path="res://.godot/imported/btparallel.png-72c2892f41b80e22bfa4396abf59a1a3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btparallel.png" +dest_files=["res://.godot/imported/btparallel.png-72c2892f41b80e22bfa4396abf59a1a3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btrandom.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btrandom.png new file mode 100644 index 0000000000000000000000000000000000000000..08d368b4b8b658330cf9fdc1c58afa93e728c408 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFB}QNlw@@PvRrCvT~?$blqr76SvILmh<}8lV0Lxrf2i)z4*}Q$iB} DHA_G1 literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btrandom.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btrandom.png.import new file mode 100644 index 0000000..fcd9245 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btrandom.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cj1bxkdykjv23" +path="res://.godot/imported/btrandom.png-0f3e4c1202cc1fd7fd32f36ce482ef97.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btrandom.png" +dest_files=["res://.godot/imported/btrandom.png-0f3e4c1202cc1fd7fd32f36ce482ef97.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btrandomselector.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btrandomselector.png new file mode 100644 index 0000000000000000000000000000000000000000..d5707812d794a7302d635fbd847945fe62deea00 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFhu=sU-R2Q1K=h5k7zfSI5)gBwT clzkEJoMoK8{=6wWfhI9{y85}Sb4q9e07o4;2mk;8 literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btrandomselector.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btrandomselector.png.import new file mode 100644 index 0000000..707a69c --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btrandomselector.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3s6eyhvmsmca" +path="res://.godot/imported/btrandomselector.png-5bbaa6b1d149c5357046de0f8d6b7707.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btrandomselector.png" +dest_files=["res://.godot/imported/btrandomselector.png-5bbaa6b1d149c5357046de0f8d6b7707.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btrepeatuntil.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btrepeatuntil.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa49d27e7a7f5534f2c1ff25a56ef53c2922270 GIT binary patch literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lhb0G|+7AnoCs+dpYpdUo5?8LPJMJo@VOyIs3a1cVm1w9ozj|9@l4tUdcq z1xJ**dS&_s6~1`!X5;3AiVB>*9XXBFV4U9cmSlHS- zCv$LcY3n)g@$tEOM5$?5#Koru1xK>7vP<|@8Utg0R*-ha{EF1KQ${~we6y=}Mf{zl(_2mJJO56-*q zxbR%T65;xlBSEK+1-8@|!LnJOIH!!<78VDpLgao-5v`i71DCr<+ahT(jKpCrcn1~5yi-7}E z0-FcJk$^JROlG4HCPf}IRRe}D5hvYN1~xW^vjJQyTrZXQ15IS`boFyt=akR{0I}gd AQ2+n{ literal 0 HcmV?d00001 diff --git a/addons/simple-state/icons/state_fullsize.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btroot.png.import similarity index 66% rename from addons/simple-state/icons/state_fullsize.png.import rename to addons/yet_another_behavior_tree/src/Assets/Icons/btroot.png.import index 561a0d8..594cd7b 100644 --- a/addons/simple-state/icons/state_fullsize.png.import +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btroot.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://b32u1sa3robj0" -path="res://.godot/imported/state_fullsize.png-41a4827bc36d7745ba55c17c0bc213e9.ctex" +uid="uid://bs628dnvnsxwl" +path="res://.godot/imported/btroot.png-5ce207fd487015fa6d9a79efff94f0e4.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/simple-state/icons/state_fullsize.png" -dest_files=["res://.godot/imported/state_fullsize.png-41a4827bc36d7745ba55c17c0bc213e9.ctex"] +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btroot.png" +dest_files=["res://.godot/imported/btroot.png-5ce207fd487015fa6d9a79efff94f0e4.ctex"] [params] diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btselector.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btselector.png new file mode 100644 index 0000000000000000000000000000000000000000..1af7092c870e58b1ef2f13f0a04f9db5c09b0fca GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFXJk~Qo90>^w4E4qw&)@xi Q2(p5~)78&qol`;+0AU3%2LJ#7 literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btselector.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btselector.png.import new file mode 100644 index 0000000..b093cc0 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btselector.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ctyhhfi6jks5a" +path="res://.godot/imported/btselector.png-68934baa4bd97bc50fd24775d28386ac.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btselector.png" +dest_files=["res://.godot/imported/btselector.png-68934baa4bd97bc50fd24775d28386ac.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btsequence.png b/addons/yet_another_behavior_tree/src/Assets/Icons/btsequence.png new file mode 100644 index 0000000000000000000000000000000000000000..1d54127ec9ed708afbb6cb0bf88f2f91e13c1030 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}B0G|+7AT611`~Uxcy&C_X?eosuzY;V#ciY87mdz2r|NLHfWc`}cJFh>x z>pvmu%a5lBSEK+1y**tVLo|Yu53uxT zFsK}0X$x>z#=v6WtkJ^2tu5W*B$SYp^t@pfBm10~Gb@;U?j$ho5R;1&G5+y`wL!$G m!B@aXk!1mcMgxNS%Lh70G|+7AnoCs>*b$+`RbjNjOIyGS6sYwD>$O;?YocZ*=?)W?b)*J@Q06| zA3c5%8C!Mw%+&>pH}BegqPl+C{RdBdg9@KMeN|A>TUt4>rG4(T>-T2QUBCa}nRDlF z^z<)|ORmq#>!`~=w*hDeXMsm#F#`kNVGw3Kp1&dmD46W&;uxY4Tze*xuR%e8Ilw{S zyXc+izwZZS1Q;7`lo$SW>A=2+D*qLfJROggESx;WY1(dPfft)DFuFumu9&(%!eniA zscjoWGP}8SE&qH!26))uQs4{44$rjF6*2U FngHJ}faw4L literal 0 HcmV?d00001 diff --git a/addons/yet_another_behavior_tree/src/Assets/Icons/btsuccess.png.import b/addons/yet_another_behavior_tree/src/Assets/Icons/btsuccess.png.import new file mode 100644 index 0000000..525a337 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Assets/Icons/btsuccess.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://v47uxlomir5w" +path="res://.godot/imported/btsuccess.png-7ab9f0bea97f3881521c44275dcb2c13.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/yet_another_behavior_tree/src/Assets/Icons/btsuccess.png" +dest_files=["res://.godot/imported/btsuccess.png-7ab9f0bea97f3881521c44275dcb2c13.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/yet_another_behavior_tree/src/Blackboard/BTBlackboard.gd b/addons/yet_another_behavior_tree/src/Blackboard/BTBlackboard.gd new file mode 100644 index 0000000..90a8ce6 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Blackboard/BTBlackboard.gd @@ -0,0 +1,89 @@ +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btblackboard.png") +class_name BTBlackboard +extends Node + + +## Blackboard allows to share data across nodes and behavior trees. You can create/retrieve/erase +## pairs of key-value. Keys and values are variants and can be anything. +## [br][br] +## Data in blackboard can be isolated in so-called [i]namespaces[/i]. A data key can exists only once in +## a namespace, but can exists multiple times across namespaces, allowing the user to isolate data when, +## for example, a blackboard is shared between multiple behavior trees. By default, if no namespace is +## specified when inserting a data into a blackboard, the [i]default namespace[/i] is used. + + +const DEFAULT_NAMESPACE:String = "_default_namespace" + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +## A dictionnary allowing to specifies default entries before tree first execution. +## [br][br] +## Those entries are added in the default namespace of the blackboard. If you want to add default entries +## in another namespace, you must do it in a script. +@export var data:Dictionary = {} + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +# { +# "namespace" : { +# DATAS +# } +# } +var _execution_data:Dictionary = {} + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _ready() -> void: + # On copie le dico défini par l'utilisateur dans le dico privé + _get_namespace_board(DEFAULT_NAMESPACE).merge(data) + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func get_delta() -> float: + # Delta is not in any namespace, since its a volatile data, that is valid just inside one tree tick + return get_data("delta") + +func has_data(key:Variant, board_namespace:String = DEFAULT_NAMESPACE) -> bool: + var namespace_dico:Dictionary = _get_namespace_board(board_namespace) + return namespace_dico.has(key) + +func get_data(key:Variant, default_value:Variant = null, board_namespace:String = DEFAULT_NAMESPACE) -> Variant: + var result:Variant = _get_namespace_board(board_namespace).get(key, default_value) + return result.get_ref() if result is WeakRef else result + +func set_data(key:Variant, value:Variant, board_namespace:String = DEFAULT_NAMESPACE) -> Variant: + var namespace_dico:Dictionary = _get_namespace_board(board_namespace) + var old_value:Variant = namespace_dico[key] if namespace_dico.has(key) else null + namespace_dico[key] = weakref(value) if value is Node else value + return old_value.get_ref() if old_value is WeakRef else old_value + +func delete_data(key:Variant, board_namespace:String = DEFAULT_NAMESPACE) -> Variant: + var namespace_dico:Dictionary = _get_namespace_board(board_namespace) + var old_value = namespace_dico[key] if namespace_dico.has(key) else null + namespace_dico.erase(key) + return old_value.get_ref() if old_value is WeakRef else old_value + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func _get_namespace_board(board_namespace:String) -> Dictionary: + if not _execution_data.has(board_namespace): + _execution_data[board_namespace] = {} + return _execution_data[board_namespace] diff --git a/addons/yet_another_behavior_tree/src/Nodes/BTNode.gd b/addons/yet_another_behavior_tree/src/Nodes/BTNode.gd new file mode 100644 index 0000000..09b7152 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/BTNode.gd @@ -0,0 +1,126 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btnode.png") +class_name BTNode +extends Node + + +## Base object for all behavior tree nodes. +## [b][u]This node should never be used directly.[/u][/b] + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +@onready var _is_in_editor:bool = Engine.is_editor_hint() +var _children:Array[BTNode] = [] + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _init() -> void: + super._init() + if _is_in_editor: + _connect_signal_if_needed(child_entered_tree, _update_configuration_warnings_1) + _connect_signal_if_needed(child_exiting_tree, _update_configuration_warnings_1) + _connect_signal_if_needed(tree_entered, _update_configuration_warnings_0) + _connect_signal_if_needed(tree_exited, _update_configuration_warnings_0) + _connect_signal_if_needed(child_entered_tree, _update_cached_children) + _connect_signal_if_needed(child_exiting_tree, _update_cached_children) + +func _ready() -> void: + if _is_in_editor: + update_configuration_warnings() + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + return BTTickResult.SUCCESS + +func is_leaf() -> bool: + return false + +func enter(blackboard:BTBlackboard) -> void: + pass + +func start(blackboard:BTBlackboard) -> void: + pass + +func stop(blackboard:BTBlackboard) -> void: + pass + +func exit(blackboard:BTBlackboard) -> void: + pass + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func _update_configuration_warnings_0() -> void: + update_configuration_warnings() + +func _update_configuration_warnings_1(any) -> void: + update_configuration_warnings() + +func is_valid() -> bool: + return false + +func _update_cached_children(any) -> void: + _children.clear() + for child in get_children(): + if child is BTNode: + _children.append(child) + +func _execute(actor:Node, blackboard:BTBlackboard) -> int: + if _is_in_editor: + return BTTickResult.FAILURE + + _enter(blackboard); + + _start(actor, blackboard) + + var result:int = tick(actor, blackboard) + if result != BTTickResult.RUNNING: + _stop(actor, blackboard) + + _exit(blackboard) + return result + +func _enter(blackboard:BTBlackboard) -> void: + enter(blackboard) + pass + +func _start(actor:Node, blackboard:BTBlackboard) -> void: + var blackboard_namespace:String = str(actor.get_instance_id()) + blackboard.get_data("running_nodes", [], blackboard_namespace).append(self) + + if not blackboard.get_data("previously_running_nodes", [], blackboard_namespace).has(self): + start(blackboard) + +func _stop(actor:Node, blackboard:BTBlackboard) -> void: + var blackboard_namespace:String = str(actor.get_instance_id()) + blackboard.get_data("running_nodes", [], blackboard_namespace).erase(self) + exit(blackboard) + stop(blackboard) + +func _exit(blackboard:BTBlackboard) -> void: + pass + +func _connect_signal_if_needed(sig:Signal, callable:Callable) -> void: + if not sig.is_connected(callable): + sig.connect(callable) diff --git a/addons/yet_another_behavior_tree/src/Nodes/BTRoot.gd b/addons/yet_another_behavior_tree/src/Nodes/BTRoot.gd new file mode 100644 index 0000000..fa23a40 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/BTRoot.gd @@ -0,0 +1,196 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btroot.png") +class_name BTRoot +extends BTNode + + +## This behavior tree is a Godot node that can be added to your Scene tree. The logic inside tree nodes +## will be run every frame, during process or physics process, depending on tree process mode. +## [br][br] +## At each frame, the [code]tick[/code] function of tree nodes will be run. This function has access to the +## [i]actor[/i] (the node the tree is describing behavior for), and a [i]blackboard[/i] (allowing to share +## data between nodes). The tick function can either returns: +## [br] +## - [code]SUCCESS[/code], indicating that node execution is successful,[br] +## - [code]RUNNING[/code], indicating that node is doing a long computation/action/whatever you want, that is not finished yet,[br] +## - [code]FAILURE[/code], indicating that something went wrong during child execution (condition not met, ...). +## [br][br] +## Depending on your tree structure, node result will produce various behaviors. See node documentation for +## mor details. + + +enum BTRootProcessMode { + PROCESS, + PHYSIC_PROCESS +} + +#------------------------------------------ +# Signaux +#------------------------------------------ + +signal on_running(running_node_names:Array) +signal on_idle() + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Indicates if tree should run or not +@export var enabled:bool = true: + set(value): + enabled = value + set_process(enabled) + set_physics_process(enabled) + +## Indicates whether tree should execute during [i]process[/i] or [i]physics process[/i]. +@export var root_process_mode:BTRootProcessMode = BTRootProcessMode.PHYSIC_PROCESS + +## Path to the node that the tree is drescribing actions for. This is the node that will be passed to all +## tree nodes, allowing you to manipulate the actor at every tree step. +@export var actor_path:NodePath : + set(value): + actor_path = value + _update_actor_from_path() + update_configuration_warnings() + +## Path to the blackboard node. This allows to share a same blackboard between several trees, for example to code +## a group of enemies acting together, or to specify some default entries using the editor. If empty, a default +## empty blackboard will be used during tree execution. +@export var blackboard:BTBlackboard = null : + set(value): + blackboard = value + _update_blackboard() + update_configuration_warnings() + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _blackboard:BTBlackboard +var _previous_running_nodes:Array[BTNode] = [] +var _actor:Node + +var _execution_start_time_ms:float +var _execution_stop_time_ms:float + +@onready var _performance_monitor_identifier:String = "BTRoot/%s-%s" % [get_name(), get_instance_id()] + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _ready() -> void: + super._ready() + + if not is_valid(): + push_error("BTRoot '%s'(%s) is not valid, check its configuration" % [get_name(), get_instance_id()]) + # Init du blackboard: soit celui de l'utilisateur, soit un tout neuf + _update_blackboard() + + if not Engine.is_editor_hint(): + _add_custom_performance_monitor() + tree_entered.connect(_add_custom_performance_monitor) + tree_exited.connect(_remove_custom_performance_monitor) + +func _process(delta:float) -> void: + if not Engine.is_editor_hint() and enabled and root_process_mode == BTRootProcessMode.PROCESS: + _do_execute(delta) + +func _physics_process(delta:float) -> void: + if not Engine.is_editor_hint() and enabled and root_process_mode == BTRootProcessMode.PHYSIC_PROCESS: + _do_execute(delta) + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + if not _check_direct_children_validity(): + warnings.append("Root tree must contains only one child of type BTComposite") + if not _check_actor_validity(): + warnings.append("Root tree actor must be filled") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + return _check_direct_children_validity() and _check_actor_validity() + +func _check_direct_children_validity() -> bool: + var is_valid:bool = get_child_count() == 1 + if is_valid: + is_valid = get_child(0) is BTComposite + return is_valid + +func _check_actor_validity() -> bool: + var is_valid:bool = actor_path != null and not actor_path.is_empty() + if is_valid: + _update_actor_from_path() + is_valid =_actor != null and is_instance_valid(_actor) + return is_valid + +func _update_blackboard() -> void: + if blackboard != null and is_instance_valid(blackboard): + _blackboard= blackboard + else: + _blackboard = BTBlackboard.new() + +func _update_actor_from_path() -> void: + _actor = get_node_or_null(actor_path) + if not is_instance_valid(_actor) and is_inside_tree(): + # Fallback : si le chemin donné n'était pas relatif à la scene courante, on le check en absolu + _actor = get_tree().current_scene.get_node_or_null(actor_path) + +func _do_execute(delta:float): + _register_execution_start() + var blackboard_namespace:String = str(_actor.get_instance_id()) + # delta est une donnée volatile, elle n'est donc pas dans un namespace puisque chaque arbre tourne + # séquentiellement, donc il n'y a pas de collision de données en cas de partage du blackboard + _blackboard.set_data("delta", delta) + _blackboard.set_data("previously_running_nodes", Array(_previous_running_nodes), blackboard_namespace) + _blackboard.set_data("running_nodes", [], blackboard_namespace) + + _children[0]._execute(_actor, _blackboard) + + var raw_running_nodes:Array = _blackboard.get_data("running_nodes", [], blackboard_namespace) + var running_nodes:Array[BTNode] = [] + running_nodes.append_array(raw_running_nodes) + if _previous_running_nodes != running_nodes: + for n in _previous_running_nodes: + if not running_nodes.has(n): + n._stop(_actor, _blackboard) + + if not running_nodes.is_empty(): + var running_node_names:Array[String] = [] + for running_node in running_nodes: + if running_node.is_leaf(): + running_node_names.append(str(running_node.name)) + on_running.emit(running_node_names) + else: + on_idle.emit() + _previous_running_nodes = running_nodes + _register_execution_stop() + +func _add_custom_performance_monitor() -> void: + if not Performance.has_custom_monitor(_performance_monitor_identifier): + Performance.add_custom_monitor(_performance_monitor_identifier, _compute_last_exec_time) + +func _remove_custom_performance_monitor() -> void: + if Performance.has_custom_monitor(_performance_monitor_identifier): + Performance.remove_custom_monitor(_performance_monitor_identifier) + +func _register_execution_start() -> void: + _execution_start_time_ms = Time.get_ticks_msec() + +func _register_execution_stop() -> void: + _execution_stop_time_ms = Time.get_ticks_msec() + +func _compute_last_exec_time() -> float: + return _execution_stop_time_ms - _execution_start_time_ms diff --git a/addons/yet_another_behavior_tree/src/Nodes/Composite/BTComposite.gd b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTComposite.gd new file mode 100644 index 0000000..619e066 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTComposite.gd @@ -0,0 +1,59 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btcomposite.png") +class_name BTComposite +extends BTNode + + +## Base object for all behavior tree composites. +## Composite nodes defines the root of a tree branch : each branch can be seen as a rule for your AI. +## They accept any kind of behavior tree nodes as children. It can either be a composite, decorator or leaf nodes +## [b][u]This node should never be used directly.[/u][/b] + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + if not _has_at_least_one_child(): + warnings.append("A composite must have at least one child node") + if not _all_children_are_bt_nodes(): + warnings.append("A composite must have children nodes of type BTNode") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + return _has_at_least_one_child() and _all_children_are_bt_nodes() + +func _has_at_least_one_child() -> bool: + return get_child_count() >= 1 + +func _all_children_are_bt_nodes() -> bool: + for child in get_children(): + if not child is BTNode: + return false + return true diff --git a/addons/yet_another_behavior_tree/src/Nodes/Composite/BTParallel.gd b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTParallel.gd new file mode 100644 index 0000000..ef216ee --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTParallel.gd @@ -0,0 +1,58 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btparallel.png") +class_name BTParallel +extends BTComposite + + +## The parallel node is a [i]composite node[/i] that executes all its children at each [code]tick[/code]. +## If at least one child is is running, the parallel reports it's running too. If no child is running, +## then if at least one child succeeded, the parallel reports success, else it reports failure. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + var at_least_one_child_running:bool = false + var at_least_one_child_success:bool = false + + for child in _children: + var result:int = child._execute(actor, blackboard) + if result == BTTickResult.SUCCESS: + at_least_one_child_success = true + if result == BTTickResult.RUNNING: + at_least_one_child_running = true + + # At least one running : this is still running ! + if at_least_one_child_running: + return BTTickResult.RUNNING + # No one is running, so, at least one success > success, else failure + elif at_least_one_child_success: + return BTTickResult.SUCCESS + else: + return BTTickResult.FAILURE + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Nodes/Composite/BTRandomSelector.gd b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTRandomSelector.gd new file mode 100644 index 0000000..767a674 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTRandomSelector.gd @@ -0,0 +1,42 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btrandomselector.png") +class_name BTRandomSelector +extends BTSelector + + +## The random selector node is a [i]composite node[/i] that behaves like the [code]BTSelector[/code] node, +## except that it executes its children in random order. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func start(blackboard:BTBlackboard) -> void: + super.start(blackboard) + if not save_progression or _running_child_index == -1: + _children.shuffle() diff --git a/addons/yet_another_behavior_tree/src/Nodes/Composite/BTSelector.gd b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTSelector.gd new file mode 100644 index 0000000..c738fb0 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTSelector.gd @@ -0,0 +1,63 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btselector.png") +class_name BTSelector +extends BTComposite + + +## The selector node is a [i]composite node[/i] that executes its children from the first one to the last one, +## in order, until one of them returns [code]SUCCESS[/code]. If a selector child succeeds, the selector +## succeed too. If all selector children failed, the selector fails too. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Indicates whether the selector should resume to the last running child on next tree execution ([code]on[/code]), +## or restart from its first child ([code]off[/code]). Its usefull to describe a non-interruptible action, +## or to optimize process time. +@export var save_progression:bool = false + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _running_child_index:int = -1 + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + for child_index in _children.size(): + if not save_progression or child_index >= _running_child_index: + var child:BTNode = _children[child_index] + var result:int = child._execute(actor, blackboard) + if result != BTTickResult.FAILURE: + if save_progression and result == BTTickResult.RUNNING: + _running_child_index = child_index + return result + + return BTTickResult.FAILURE + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func start(blackboard:BTBlackboard) -> void: + _running_child_index = 0 + +func stop(blackboard:BTBlackboard) -> void: + _running_child_index = -1 diff --git a/addons/yet_another_behavior_tree/src/Nodes/Composite/BTSequence.gd b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTSequence.gd new file mode 100644 index 0000000..24f8181 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Composite/BTSequence.gd @@ -0,0 +1,63 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btsequence.png") +class_name BTSequence +extends BTComposite + + +## The sequence node is a [i]composite node[/i] that executes its children from the first one to the last +## one, until all children succeed or one of its children fails. If all children succeed, the sequence +## succeeds too ; if one child fails, the sequence fails too. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Indicates whether the sequence should resume to the last running child on next tree execution ([code]on[/code]), +## or restart from its first child ([code]off[/code]). Its usefull to describe a non-interruptible action, or to +## optimize process time. +@export var save_progression:bool = false + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _running_child_index:int = -1 + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + for child_index in _children.size(): + if not save_progression or child_index >= _running_child_index: + var child:BTNode = _children[child_index] + var result:int = child._execute(actor, blackboard) + if result != BTTickResult.SUCCESS: + if save_progression and result == BTTickResult.RUNNING: + _running_child_index = child_index + return result + + return BTTickResult.SUCCESS + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func start(blackboard:BTBlackboard) -> void: + _running_child_index = 0 + +func stop(blackboard:BTBlackboard) -> void: + _running_child_index = -1 diff --git a/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTDecorator.gd b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTDecorator.gd new file mode 100644 index 0000000..9185a47 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTDecorator.gd @@ -0,0 +1,58 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btdecorator.png") +class_name BTDecorator +extends BTNode + + +## Base object for all behavior tree decorators. +## Decorator nodes allow to customize result of its only child node. +## [b][u]This node should never be used directly.[/u][/b] + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + if not _has_only_one_child(): + warnings.append("A decorator must have only one child") + if not _child_is_bt_node(): + warnings.append("A decorator must have a child of type BTNode") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + return _has_only_one_child() and _child_is_bt_node() + +func _has_only_one_child() -> bool: + return get_child_count() >= 1 + +func _child_is_bt_node() -> bool: + for child in get_children(): + if not child is BTNode: + return false + return true diff --git a/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTFailure.gd b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTFailure.gd new file mode 100644 index 0000000..5185bc6 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTFailure.gd @@ -0,0 +1,41 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btfailure.png") +class_name BTFailure +extends BTDecorator + + +## The failure node is a [i]decorator[/i] node that always returns [i]failed[/i] on child execution. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + _children[0]._execute(actor, blackboard) + return BTTickResult.FAILURE + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTInverter.gd b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTInverter.gd new file mode 100644 index 0000000..530e78b --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTInverter.gd @@ -0,0 +1,47 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btinverter.png") +class_name BTInverter +extends BTDecorator + + +## The inverter node is a [i]decorator[/i] node returns [i]success[/i] when its child fails its execution, +## and [i]failure[/i] when its child succeeds its execution. When its child is [i]running[/i], it returns +## [i]running[/i] too. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + var child_result:int = _children[0]._execute(actor, blackboard) + if child_result == BTTickResult.SUCCESS: + return BTTickResult.FAILURE + if child_result == BTTickResult.FAILURE: + return BTTickResult.SUCCESS + return BTTickResult.RUNNING + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTLimiter.gd b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTLimiter.gd new file mode 100644 index 0000000..49cd82a --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTLimiter.gd @@ -0,0 +1,60 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btlimiter.png") +class_name BTLimiter +extends BTDecorator + + +## The limiter node is a [i]decorator[/i] node that limits the total number of execution of its child node. +## When the limit is not reachs, the limiter nodes reports its child execution status. Once the limit is reachs, +## it never executs its child and always report a [i]failed[/i] execution. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Number of allowed child execution. +@export_range(0, 9999999, 1) var limit:int = 1 + +## Whether or not the [code]limit[/code] value is included into the number of times the child can run. +## It clarifies the usage of the limit. +@export var include_limit:bool = true + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _invocation_count:int = 0 + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + var limit_reached:bool = _invocation_count >= limit + if not include_limit: + limit_reached = _invocation_count >= limit - 1 + + if limit_reached: + return BTTickResult.FAILURE + + var result:int = _children[0]._execute(actor, blackboard) + if result != BTTickResult.RUNNING: + _invocation_count += 1 + return result + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTRandom.gd b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTRandom.gd new file mode 100644 index 0000000..07cd4e2 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTRandom.gd @@ -0,0 +1,47 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btrandom.png") +class_name BTRandom +extends BTDecorator + + +## The random node is a [i]decorator[/i] node randomly execute its child. If the child is executed, +## the node result is the same as its child result. Otherwise, result is [i]failure[/i]. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## A float between [code]0[/code] (included) and [code]1[/code] (included) indicating the probability of child +## execution. +@export_range(0, 1) var probability:float = 0.5 + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + var random_float:float = randf() + if random_float > probability: + return BTTickResult.FAILURE + return _children[0]._execute(actor, blackboard) + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTRepeatUntil.gd b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTRepeatUntil.gd new file mode 100644 index 0000000..8ceffdf --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTRepeatUntil.gd @@ -0,0 +1,67 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btrepeatuntil.png") +class_name BTRepeatUntil +extends BTDecorator + + +## The repeat until node is a [i]decorator[/i] node that loop its child execution until child execution result +## is as excepted. It is possible to specifies the maximum number of loop execution allowed to obtain the desired +## result. If desired result is obtained before the loop execution limit, the repeat until node returns the +## obtained result. If not, its returns a [i]failure[/i]. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Expected child result to stop the loop. +@export_enum("SUCCESS:0", "RUNNING:1", "FAILURE:2") var stop_condition:int = 0 + +## Maximum number of child execution to obtain the desired result. If value is [code]0[/code], there is +## [b]no limit[/b] to the number of times the loop can run (⚠️ be careful to not create an infinite loop). +## If value is more than zero, its represents the maximum number of loop execution. +@export_range(0, 999999) var max_iteration:int = 0 + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + var result:int + var not_stopped:bool = true + var iteration_count:int = 0 + while not_stopped: + result = _children[0]._execute(actor, blackboard) + if stop_condition == BTTickResult.SUCCESS and result == BTTickResult.SUCCESS: + not_stopped = false + if stop_condition == BTTickResult.RUNNING and result == BTTickResult.RUNNING: + not_stopped = false + if stop_condition == BTTickResult.FAILURE and result == BTTickResult.FAILURE: + not_stopped = false + + if max_iteration > 0: + iteration_count += 1 + if not not_stopped and iteration_count > max_iteration: + not_stopped = false + + return result + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTSuccess.gd b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTSuccess.gd new file mode 100644 index 0000000..8c9fe7a --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Decorators/BTSuccess.gd @@ -0,0 +1,41 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btsuccess.png") +class_name BTSuccess +extends BTDecorator + + +## The success node is a [i]decorator[/i] node that always returns [i]success[/i] on child execution. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + _children[0]._execute(actor, blackboard) + return BTTickResult.SUCCESS + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTAction.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTAction.gd new file mode 100644 index 0000000..3637f54 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTAction.gd @@ -0,0 +1,38 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btaction.png") +class_name BTAction +extends BTLeaf + + +## The action node is a [i]leaf[/i] node. Its purpose is to return [i]success[/i] when an action is completed, +## [i]failure[/i] if its fails to execute, and [i]running[/i] if the action is occuring but is not completed yet. +## [b][u]Users must subclass this node to implements their own actions.[/u][/b] + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardDelete.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardDelete.gd new file mode 100644 index 0000000..dc0fd44 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardDelete.gd @@ -0,0 +1,64 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboarddelete.png") +class_name BTActionBlackboardDelete +extends BTLeaf + + +## The blackboard delete action node is a [i]leaf[/i] node. It allows to erase a key from the tree blackboard. +## This node operates in the blackboard [i]default namespace[/i]. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Name of the key that must be erased from blackboard, in [i]default namespace[/i] +@export var blackboard_key:String = "" : + set(value): + blackboard_key = value + update_configuration_warnings() + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + warnings.append_array(super._get_configuration_warnings()) + if not _blackboard_key_is_set(): + warnings.append("Blackboard key must be set") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + blackboard.delete_data(blackboard_key) + return BTTickResult.SUCCESS + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + var is_valid:bool = super.is_valid() + if is_valid: + is_valid = _blackboard_key_is_set() + return is_valid + +func _blackboard_key_is_set() -> bool: + return blackboard_key != null and not blackboard_key.is_empty() + diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardSet.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardSet.gd new file mode 100644 index 0000000..be1ab5c --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardSet.gd @@ -0,0 +1,98 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btactionblackboardset.png") +class_name BTActionBlackboardSet +extends BTLeaf + + +## The blackboard set action node is a [i]leaf[/i] node. It allows to set a value in the blackboard. +## Its execution always returns [i]success[/i]. This node operates in the blackboard [i]default namespace[/i]. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Name of the key that must be set, in [i]default namespace[/i] +@export var blackboard_key:String = "" : + set(value): + blackboard_key = value + update_configuration_warnings() + +## An expression representing the value to associated to the given key. The expression will be evaluated by +## Godot Engine during child execution. It should be simple. See [url=https://docs.godotengine.org/en/latest/classes/class_expression.html]Godot Expression[/url] +## for details. In expression, user has access to two predefined variables:[br] +## - [code]actor[/code]: the node the tree is describing action for,[br] +## - [code]blackboard[/code]: the tree blackboard,[br] +## - [code]delta[/code]: the [i]_process[/i] or [i]_physics_process[/i] delta value, as a [code]float[/code]. +@export_multiline var expression:String = "" : + set(value): + if value != expression: + expression = value + _update_expression() + update_configuration_warnings() + +## Indicates if the value must be overwritten if it already exists or not +@export var can_overwrite_value:bool = false + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _expression:BTExpression = BTExpression.new() + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + warnings.append_array(super._get_configuration_warnings()) + if not _blackboard_key_is_set(): + warnings.append("Blackboard key must be set") + if not _expression_key_is_set(): + warnings.append("Expression must be set") + if not _expression_is_valid(): + warnings.append("Expression is not valid") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + if can_overwrite_value or not blackboard.has_data(blackboard_key): + var value:Variant = _expression.evaluate(actor, blackboard) + blackboard.set_data(blackboard_key, value) + return BTTickResult.SUCCESS + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + var is_valid:bool = super.is_valid() + if is_valid: + is_valid = _blackboard_key_is_set() + if is_valid: + is_valid = _expression_key_is_set() + return is_valid + +func _blackboard_key_is_set() -> bool: + return blackboard_key != null and not blackboard_key.is_empty() + +func _expression_key_is_set() -> bool: + return expression != null and not expression.is_empty() + +func _expression_is_valid() -> bool: + return _expression.is_valid() + +func _update_expression() -> void: + _expression.expression = expression diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionCallable.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionCallable.gd new file mode 100644 index 0000000..5606ea9 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionCallable.gd @@ -0,0 +1,123 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btactioncallable.png") +class_name BTActionCallable +extends BTLeaf + + +## The callable action node is a [i]leaf[/i] node. At each tick, the node calls a function from an object that has +## been parametrized. It can also pass arguments to this function. Its result depends of the specified function +## result: +## [br] +## - If specified function returns a [code]bool[/code], then the tick result is [i]success[i] is boolean +## is [code]true[/code], [i]failure[/i] otherwise,[br] +## - If the specified function returns an [code]int[/code], it is interpreted as the enum values [code]SUCCESS[/code], +## [code]RUNNING[/code] or [code]FAILURE[/code] from [code]BTTickResult[/code] object. If another value is returned +## by specified function, behavior is undefined,[br] +## - If specified function returns nothing ([code]void[/code] or [code]null[/code] result), then [i]success[/i] +## is returned. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Path to the node that contains the function to call +@export var method_owner_path:NodePath: + set(value): + method_owner_path = value + _update_method_owner_from_path() + update_configuration_warnings() + +## Name of the function to call in the [i]method owner node[/i] +@export var method_name:String = "": + set(value): + method_name = value + update_configuration_warnings() + +## Array of arguments to pass when calling the function. Arguments are expressions that will +## be evaluated by Godot Engine at runtime to produce the desired value. See [url=https://docs.godotengine.org/en/latest/classes/class_expression.html]Godot Expression[/url] +## for details. In expression, user has access to two predefined variables:[br] +## - [code]actor[/code]: the node the tree is describing action for,[br] +## - [code]blackboard[/code]: the tree blackboard,[br] +## - [code]delta[/code]: the [i]_process[/i] or [i]_physics_process[/i] delta value, as a [code]float[/code].[br] +## Number and types of arguments must match function prototype, or an error will occurs at runtime. +@export var method_arguments:Array[String] = [] + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _method_owner:Node +var _cached_method_arguments:Array[String] = [] +var _argument_expression:Array[BTExpression] = [] + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _ready() -> void: + _update_method_owner_from_path() + _update_argument_expressions() + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + warnings.append_array(super._get_configuration_warnings()) + if not _check_method_owner_validity(): + warnings.append("Method owner must be set") + if not _check_method_name_validity(): + warnings.append("Method name must be set") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + _update_argument_expressions() + var arguments:Array[Variant] = _argument_expression.map(func(expr):return expr.evaluate(actor, blackboard)) + var result:Variant = _method_owner.callv(method_name, arguments) + if result is bool: + return BTTickResult.SUCCESS if result else BTTickResult.FAILURE + if result is int: + return result + return BTTickResult.SUCCESS + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + return _check_method_owner_validity() and _check_method_name_validity() + +func _check_method_owner_validity() -> bool: + var is_valid:bool = method_owner_path != null and not method_owner_path.is_empty() + if is_valid: + _update_method_owner_from_path() + is_valid = _method_owner != null and is_instance_valid(_method_owner) + return is_valid + +func _check_method_name_validity() -> bool: + return method_name != null and not method_name.is_empty() + +func _update_method_owner_from_path() -> void: + _method_owner = get_node_or_null(method_owner_path) + if not is_instance_valid(_method_owner) and is_inside_tree(): + # Fallback : si le chemin donné n'était pas relatif à la scene courante, on le check en absolu + _method_owner = get_tree().current_scene.get_node_or_null(method_owner_path) + +func _update_argument_expressions() -> void: + if _cached_method_arguments != method_arguments: + _cached_method_arguments = Array(method_arguments) + _argument_expression.clear() + for expr in _cached_method_arguments: + var btexpression:BTExpression = BTExpression.new() + btexpression.expression = expr + _argument_expression.append(btexpression) diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionWait.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionWait.gd new file mode 100644 index 0000000..e2f58de --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionWait.gd @@ -0,0 +1,62 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btactionwait.png") +class_name BTActionWait +extends BTLeaf + + +## The wait action node is a [i]leaf[/i] node. Its execution returns [i]running[/i] during the specified wait time, +## then returns *success* when specified time is elapsed. After succeeded, the wait time is rearmed for next +## tree execution. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Number of milliseconds to wait before returning [i]success[/i] +@export var wait_time_ms:int = 1_000 + +## Indicates if a random deviation should be applied to the wait time. [code]0[/code] means there is no +## deviation et the wait time will be strictyl respected. Random deviation may change after each node rearm. +@export var random_deviation_ms:int = 0 + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _current_time_ms:float = 0 +var _time_to_reach_ms:int + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + _current_time_ms += blackboard.get_delta() * 1_000 + if _current_time_ms <= _time_to_reach_ms: + return BTTickResult.RUNNING + return BTTickResult.SUCCESS + +func start(blackboard:BTBlackboard) -> void: + _current_time_ms = 0 + _time_to_reach_ms = wait_time_ms + if random_deviation_ms != 0: + _time_to_reach_ms += randi_range(0, random_deviation_ms) + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + + diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTCondition.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTCondition.gd new file mode 100644 index 0000000..2be6861 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTCondition.gd @@ -0,0 +1,38 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btcondition.png") +class_name BTCondition +extends BTLeaf + + +## The condition node is a [i]leaf[/i] node. Its purpose is to return [i]success[/i] when a condition is meet, +## [i]failure[/i] otherwise. This node should never return [i]running[/i]. +## [b][u]Users must subclass this node to implements their own conditions.[/u][/b] + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionBlackboardKeyExists.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionBlackboardKeyExists.gd new file mode 100644 index 0000000..e744b3c --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionBlackboardKeyExists.gd @@ -0,0 +1,66 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btconditionblackboardkeyexists.png") +class_name BTConditionBlackboardKeyExists +extends BTLeaf + + +## The blackboard key exists condition node is a [i]leaf[/i] node. It returns [i]success[/i] if a certain key +## is present in the tree blackboard during its execution, [i]failure[/i] otherwise. This node operates in the blackboard +## [i]default namespace[/i]. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Name of the key that must exists in the blackboard, in [i]default namespace[/i] +@export var blackboard_key:String = "" : + set(value): + blackboard_key = value + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + warnings.append_array(super._get_configuration_warnings()) + if not _blackboard_key_is_set(): + warnings.append("Blackboard key must be set") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + var result:int = BTTickResult.FAILURE + if blackboard.has_data(blackboard_key): + result = BTTickResult.SUCCESS + return result + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + var is_valid:bool = super.is_valid() + if is_valid: + is_valid = _blackboard_key_is_set() + return is_valid + +func _blackboard_key_is_set() -> bool: + return blackboard_key != null and not blackboard_key.is_empty() + diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionBlackboardValuesComparison.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionBlackboardValuesComparison.gd new file mode 100644 index 0000000..de943f4 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionBlackboardValuesComparison.gd @@ -0,0 +1,105 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btconditionblackboardvaluescomparison.png") +class_name BTConditionBlackboardValuesComparison +extends BTLeaf + + +## The blackboard values comparison condition node is a [i]leaf[/i] node. It returns [i]success[/i] both values +## represented by specified keys returns true when compared using the given operator. This node operates in the blackboard +## [i]default namespace[/i]. + + +enum Operator { + EQUAL = 1, + NOT_EQUAL = 2, + LOWER = 3, + LOWER_OR_EQUAL = 4, + GREATER = 5, + GREATER_OR_EQUAL = 6 +} + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Name of the key that old the first value to compare, in [i]default namespace[/i] +@export var first_operand_blackboard_key:String = "" : + set(value): + first_operand_blackboard_key = value + update_configuration_warnings() + +## Operator used to compare values +@export_enum("EQUAL:1", "NOT_EQUAL:2", "LOWER:3", "LOWER_OR_EQUAL:4", "GREATER:5", "GREATER_OR_EQUAL:6") var operator:int = 0 + +## Name of the key that old the second value to compare, [i]default namespace[/i] +@export var second_operand_blackboard_key:String = "" : + set(value): + second_operand_blackboard_key = value + update_configuration_warnings() + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _parsed_compared_value:Variant + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + warnings.append_array(super._get_configuration_warnings()) + if not _blackboard_keys_are_set(): + warnings.append("Blackboard keys must be set") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + var result:int = BTTickResult.FAILURE + + var first_operand:Variant = blackboard.get_data(first_operand_blackboard_key) + var second_operand:Variant = blackboard.get_data(second_operand_blackboard_key) + if first_operand != null and second_operand != null: + var compare_result:bool = false + match(operator): + Operator.EQUAL: + compare_result = first_operand == second_operand + Operator.NOT_EQUAL: + compare_result = first_operand != second_operand + Operator.LOWER: + compare_result = first_operand < second_operand + Operator.LOWER_OR_EQUAL: + compare_result = first_operand <= second_operand + Operator.GREATER: + compare_result = first_operand > second_operand + Operator.GREATER_OR_EQUAL: + compare_result = first_operand >= second_operand + if compare_result: + return BTTickResult.SUCCESS + return result + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + var is_valid:bool = super.is_valid() + if is_valid: + is_valid = _blackboard_keys_are_set() + return is_valid + +func _blackboard_keys_are_set() -> bool: + return first_operand_blackboard_key != null and not first_operand_blackboard_key.is_empty() and second_operand_blackboard_key != null and not second_operand_blackboard_key.is_empty() + diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionCallable.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionCallable.gd new file mode 100644 index 0000000..236c576 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionCallable.gd @@ -0,0 +1,112 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btconditioncallable.png") +class_name BTConditionCallable +extends BTLeaf + + +## The callable condition node is a [i]leaf[/i] node. The node calls a function from an object that has been +## parametrized to check for a condition. It can also pass arguments to this function. Its result is the function +## result, meaning that specified function must returns a [code]bool[/code] value. This nodes returns +## [i]success[/i] if function call returned [code]true[/code], and [i]failure[/i] if function call returned [code]false[/code]. + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +## Path to the node that contains the function to call +@export var method_owner_path:NodePath: + set(value): + method_owner_path = value + _update_method_owner_from_path() + update_configuration_warnings() + +## Name of the function to call in the [i]method owner node[i] +@export var method_name:String = "": + set(value): + method_name = value + update_configuration_warnings() + +## Array of arguments to pass when calling the function. Arguments are expressions that will +## be evaluated by Godot Engine at runtime to produce the desired value. See [url=https://docs.godotengine.org/en/latest/classes/class_expression.html]Godot Expression[/url] +## for details. In expression, user has access to two predefined variables:[br] +## - [code]actor[/code]: the node the tree is describing action for,[br] +## - [code]blackboard[/code]: the tree blackboard,[br] +## - [code]delta[/code]: the [i]_process[/i] or [i]_physics_process[/i] delta value, as a [code]float[/code].[br] +## Number and types of arguments must match function prototype, or an error will occurs at runtime. +@export var method_arguments:Array[String] = [] + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _method_owner:Node +var _cached_method_arguments:Array[String] = [] +var _argument_expression:Array[BTExpression] = [] + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _ready() -> void: + _update_method_owner_from_path() + _update_argument_expressions() + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + warnings.append_array(super._get_configuration_warnings()) + if not _check_method_owner_validity(): + warnings.append("Method owner must be set") + if not _check_method_name_validity(): + warnings.append("Method name must be set") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func tick(actor:Node, blackboard:BTBlackboard) -> int: + _update_argument_expressions() + var arguments:Array[Variant] = _argument_expression.map(func(expr):return expr.evaluate(actor, blackboard)) + var result:bool = _method_owner.callv(method_name, arguments) + return BTTickResult.SUCCESS if result else BTTickResult.FAILURE + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + return _check_method_owner_validity() and _check_method_name_validity() + +func _check_method_owner_validity() -> bool: + var is_valid:bool = method_owner_path != null and not method_owner_path.is_empty() + if is_valid: + _update_method_owner_from_path() + is_valid = _method_owner != null and is_instance_valid(_method_owner) + return is_valid + +func _check_method_name_validity() -> bool: + return method_name != null and not method_name.is_empty() + +func _update_method_owner_from_path() -> void: + _method_owner = get_node_or_null(method_owner_path) + if not is_instance_valid(_method_owner) and is_inside_tree(): + # Fallback : si le chemin donné n'était pas relatif à la scene courante, on le check en absolu + _method_owner = get_tree().current_scene.get_node_or_null(method_owner_path) + +func _update_argument_expressions() -> void: + if _cached_method_arguments != method_arguments: + _cached_method_arguments = Array(method_arguments) + _argument_expression.clear() + for expr in _cached_method_arguments: + var btexpression:BTExpression = BTExpression.new() + btexpression.expression = expr + _argument_expression.append(btexpression) diff --git a/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTLeaf.gd b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTLeaf.gd new file mode 100644 index 0000000..618805d --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Nodes/Leaves/BTLeaf.gd @@ -0,0 +1,55 @@ +@tool +@icon("res://addons/yet_another_behavior_tree/src/Assets/Icons/btleaf.png") +class_name BTLeaf +extends BTNode + + +## Base object for all behavior tree leaves. +## Leaf nodes, as their name implies, do not have any child. They represents basic unit of work of your +## AI, which can be separated into two notions: conditions and actions. +## [b][u]This node should never be used directly.[/u][/b] + + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _get_configuration_warnings() -> PackedStringArray: + var warnings:PackedStringArray = [] + if not _has_no_child(): + warnings.append("A leaf must not have child") + return warnings + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func is_leaf() -> bool: + return true + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func is_valid() -> bool: + return _has_no_child() + +func _has_no_child() -> bool: + return get_child_count() == 0 + diff --git a/addons/yet_another_behavior_tree/src/Result/BTTickResult.gd b/addons/yet_another_behavior_tree/src/Result/BTTickResult.gd new file mode 100644 index 0000000..5c160d0 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Result/BTTickResult.gd @@ -0,0 +1,36 @@ +extends RefCounted +class_name BTTickResult + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +enum { + SUCCESS = 0, + RUNNING = 1, + FAILURE = 2 +} + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ diff --git a/addons/yet_another_behavior_tree/src/Utils/BTExpression.gd b/addons/yet_another_behavior_tree/src/Utils/BTExpression.gd new file mode 100644 index 0000000..9e17b93 --- /dev/null +++ b/addons/yet_another_behavior_tree/src/Utils/BTExpression.gd @@ -0,0 +1,64 @@ +extends RefCounted +class_name BTExpression + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +var expression:String = "": + set(value): + if value != expression: + expression = value + _expression = _parse_expression(expression) + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _expression:Expression + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func is_valid() -> bool: + return _expression != null + +func evaluate(actor:Node, blackboard:BTBlackboard) -> Variant: + var arguments:Array[Variant] = [actor, blackboard, blackboard.get_delta()] + return _execute_expression(arguments) + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func _parse_expression(string_expr:String) -> Expression: + var expr:Expression = Expression.new() + var parse_code:int = expr.parse(string_expr, ["actor", "blackboard", "delta"]) + if parse_code != OK: + push_error("Unable to parse expression '%s' : %s" % [string_expr, expr.get_error_text()]) + return null + return expr + +func _execute_expression(arguments:Array[Variant]) -> Variant: + var result:Variant = null + if _expression == null: + _expression = _parse_expression(expression) + if _expression != null: + result = _expression.execute(arguments, self, true) + if _expression.has_execute_failed(): + result = null + push_error("Unable to execute expression '%s' : %s" % [expression, _expression.get_error_text()]) + return result diff --git a/addons/yet_another_behavior_tree/yet_another_behavior_tree.gd b/addons/yet_another_behavior_tree/yet_another_behavior_tree.gd new file mode 100644 index 0000000..0813f65 --- /dev/null +++ b/addons/yet_another_behavior_tree/yet_another_behavior_tree.gd @@ -0,0 +1,12 @@ +@tool +extends EditorPlugin + + +func _enter_tree() -> void: + # Initialization of the plugin goes here. + pass + + +func _exit_tree() -> void: + # Clean-up of the plugin goes here. + pass diff --git a/documentation/assets/.gdignore b/documentation/assets/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/documentation/assets/bt_illustration.png b/documentation/assets/bt_illustration.png new file mode 100644 index 0000000000000000000000000000000000000000..19d2ce9991f1f5dcd63f8b083da868e2fae534d4 GIT binary patch literal 28329 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

@k5RLjt6mW5 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 V%q*Bf{>cGKMnX}%O3XO;e*o${w8sDd literal 0 HcmV?d00001 diff --git a/documentation/assets/nodes/btactioncallable.png b/documentation/assets/nodes/btactioncallable.png new file mode 100644 index 0000000000000000000000000000000000000000..ea4da8b9c76bcac29fb08c17c88c34df3b504787 GIT binary patch literal 19861 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¥~SLcKP+{?k%hxA=CsKPy?x6jJ>crVPaTaYor~ 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 Y72y~Yq|bX$rS^k`nYC%LiSymR0nu4o-~a#s literal 0 HcmV?d00001 diff --git a/documentation/assets/nodes/btactionwait.png b/documentation/assets/nodes/btactionwait.png new file mode 100644 index 0000000000000000000000000000000000000000..2baa0ecf2c6cb596f18e5d3da737a84537822ea0 GIT binary patch literal 13013 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 literal 0 HcmV?d00001 diff --git a/documentation/assets/nodes/btconditionblackboardkeyexists.png b/documentation/assets/nodes/btconditionblackboardkeyexists.png new file mode 100644 index 0000000000000000000000000000000000000000..4cb0106b16ae3e10df33773f31fa00e79731b8c6 GIT binary patch literal 10154 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 literal 0 HcmV?d00001 diff --git a/documentation/assets/nodes/btconditioncallable.png b/documentation/assets/nodes/btconditioncallable.png new file mode 100644 index 0000000000000000000000000000000000000000..5020b8992444a6927574b009778fda71f44c756a GIT binary patch literal 20767 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 literal 0 HcmV?d00001 diff --git a/documentation/assets/nodes/btrandomselector.png b/documentation/assets/nodes/btrandomselector.png new file mode 100644 index 0000000000000000000000000000000000000000..0193d06a5ca5d17922f9f2d5121a072cbf3286c0 GIT binary patch literal 9837 zcmZ8{by!qS*fvNvE8Qh6odS}}qI4s$(%rGrAq~>f(jlOfbobIN-61L6OMi>M_j|wV z`u^CMbI!~>Gv~?so(NTCIUG!KOauf3ocHg5>IeugHsJr2&{5&ve*_UZ;6I42>T=Qu z<)f5)@CLG_l#&zzLS-!0y)g>Bjp6i8*A)TbCFJ>oxMD%$fq=mD;yqAG)5G9!8O=jO zivsP$KY?FqvQ=M?CExs*RYT1=r$JTl5=lz;3kwAqX1_WzFw_vBR!E}6&Lxfe;>bPW=-TZ^M7$1%dGOd+0i4*_33(Z$<>aM+P@7sil>*JaWv*3C+}2Qy!JyiLBUQ1-1=Td_?Jm9Fs?7t$J22a8A3 zOjr5un3iK%jhYOjQW-o~<1eL_9If>C4eOb#kEn4s+*#;3khqB%I=YFjwy0H2qAKOo zZfHlBNqBqb?D6UN=*0(asLn-IgSeS#u?YBvZMF~S`BNo8TO?vt_H~@^9 z!vafMhSjP}v?Lg3TlOu_Bg_xOjw(ad%J-2aV6^#SiOlpstxsShsxoY*^(TOY&UJ4y zqFCoGIwK<^_au8tm${~$*o@suV5axgpUQ2eN{_#2Hqdey4=K50>W{7FVGGoio zaC5mu@sPaTWW(yp*7pxlKDOcRlNNQwwflgL2Vj*q$EXhE74|{tKLI}nW^vp+$&`WQE=@;zuZyAv4 z2!CfguHsUcb8@G0v1XKL-L4V}tTPm46Z)m@!SLy-8zv z%}d+ANRYYk379~BiBFvp?vszmGGz)CeHbrxpxVWi9XL#uXJ3vL#&wP%T#8-_KrlU^ z`@dUX3V8CmC#`W~LR!hCSSF z++9li`4d}+glJHc^b+E`&8kQ)5==ZGy8|$d^PvMdwEL#_{d&3}gNfPzWIHcLW<_#c z`*zm$*CV11?Cc8cxnK?g_da6l8%LqFhJFFxCGLTUA7aZh4T9x=Kn>*{drt-?PkWe6 zCw>|;Y;NzLbQjvgj>jl+r{{9_Cl61hp4w7{?-ZuWsDoov>g2MN!(`cK*NT=QN7N3y zniASY#Gx0vF>7oAEIH|s4{}ev4Ha!5MoTp4_TTYV8E;6D@2!{TKzig!|2v;rAI7dR zIn&vnj_V*H!sQhj+*;`fRvO%p*f3Gbnk&NXNB~v#=h;x)lvUaN+e_{O9lR#GAHk&= zl=q%2*cvh^c~#A#c3Sc`t=zqHK{5a74(~TbNj0AFQb0zn9-CQ`u=^=}%YguTVGgzg z*WCQVpt-#kTTWGld6RSiuD#wwI*zvEQt)Q*D`d1=hGKOTN(pc6(38ab7ZBf5&nSOK z?iW4}P8$brghfP*V4@G)Hmd%wwl+J>1Z65_^A(Cn#@iPugx%L)h=IW;ip|=v^P;3; z5-`a~;RGHLw{WrtIWb9mB4lWC?)u#L#Vlz|)C1DVIjWx+l-=ze&eT*C(LF9s z2lIh(L(R;G%t=iTjG=HB)a#JY_AWLpUmUugN#P9fWD#SrQ_iYK2vZ5^PLjUCiC6*p z__8h$4+yR+`Ee>I(PlFd)I5r+ku-cNbnFE4O*n5q2&`L$;|dA9-oso z1Y@687nZ39800gp9nOZ)LPla;MDuP2Co`KE3N(Z$-%xSZ8@781dCAgI2n4VOzoVpHE6qY)6VCHp}zDYb$vss}0B3G%twirsBT(IH`bczu3Og_4qjx}wjGNhFX#jjfT zNanlx`s)yrsS5N@=WN1Ww^2(Ku|*_ty20{(ZT*v533eAqwlWJc6SuEVH zt5!68072wmE%rZiu|t(cm%OmMo3*^!omBR5cLr*8B4`C_@kXQ(iKXfwDCrAg|KMP6 zDG!5_$+31u0R@4-Ax&epUJ{$MVWE-;JZdQlhr_+Gz4{!>FQ0A@HtAbHX7=9*oc6;w z`yXL$o;VRVC^O&7g90HoUc~%vHky}sk})ernTUjBQ7kz|IHICtRTZ+x9=-q+O+Cpe zzsRfkL`d2BCdHR12wzT)N!u_;-t3`~$XD~r)oe{*Bk*FEemf$BwRqC^Gy2gieH|A~ z0c3ow_BzybdsZPXIW59+p|01|=1b!weYv2_ga-Ne!vY z9!WmF@$~%FJnH<{ln7>1uDq|s>r5u1-&xf4SGm|T zwUa9wNNa-vKW}0ahRNpWKHRFZ5xpyX=#mS-< z%-g#)kklRMr?Bwa(6og5T(lfQ$bNoqWTo*0*iN?!K`zBNl8xxW9Ot^KcAvGu=JaMR z9{s^YUQGvTOoJ{la`={#?IiVR^I zR!9DFNjfo3*0d|#z&`!D4x#P_rvj(n8kPCo(rsYc8!)4iMY6#*%Tqn6lQy!cII~ zlDIvIb}CS1 zffRkjdVK{c`ttK-n~CQp8pF$*pfb5_xOxY|9;CMQb~5rdA~rgBpmI(f)T@)-$X%to zn@_XZ#R`+zxfJBgO*eCG-q~WHUQ+K5&JzEna)0H(aU*O%(Ia(1%!yAJ;2Lrd4I>VA z`t%n?9-q}9*1PK#nKo)bV{z@N+b{NM!+GnC*p);Xlxzh{Xt4(dB zYjXS_PxD>f3S3D>Jm_WJgY(|DShdM4vb_~=%zm*D8*s%?E-#P5AET$aIUz)5iWh(O z5bla^8TGd2$Q<84E+WT(99n<)NYE{w?aqqN2T!uypB)%A8GZO_MA)0~$asOU)@d|v z+z{iFi?KJ)zRkDeIr7a3q*rjmAFp>1hPDPahd*cAfmVG~lxux-@Y_fEXS#Rl(G5oZ zgHngvO2%!SlGyO{|M6ovX+apgcl%fAAJDX4464nIABqyOHUh2ky5Lb2kuEfnq%}H` zZ2aFts_!wTjvP|FztQWUJQomn=sZ5H%FH4d^~y$3JXaM=O@Txom%fdhsZc+6pf<|` zJ&P8U3r-t(77|`^R6Zf$Zv0o9JkU5%z(?^`jS$=j2}!=@#b!z{7xv+ax*x&E^ZJ>n z>dHs*ydvPDllPs1J@ifZ(-2wJ8Gbm<#rXR&iJaCq0wCJ_`|^oRC3iDOizO=!Jzyb}`n3s>>KUd{UrN-7ad0;%o?$ zDUS_`RtN*p1?U@dAS~LzqKR})!^nNcCN3*WiXrNerg$U@-T3)Q!HK`^~FeBNgg`+ z+t|yZJI>znVE?@eyFUls%p&@TThei;4YzN=UtMit37~zC)UAs!sqpeCpO%jlGu z+D~qA5}C=2K^`TxTaITC`$3(<~k`Z&VY0aKLUcCdG?+PxO) z(t}$1NzbflP-G!xIb5CE7*>b7dAXGinRSjie`Y66i6=zrAf>qcT(L9G-!ECQDO}EW zVOC9F3_NQx^e}4E&v9Z6r^Lv5dK4(b8n9lRa*B3pE123)p}^_C}RYjXSiQCixF^&ndVZ91XjGXkMIkb;KE<=TyOZ zbec69Wwz*(6hc$^*}{I@59IQWzU#wey94Sf&Z5BWViRtMLd*O;EYgLM?6+ixV`5_B6A(ngpqmPGEtjSvJPj%;!I1r^m@#n-Q8^A}ht+5%m731dQ-(^1Lr^M9 z4jZcz`AgoD=@x75N!d*>?2R)&srVWP_U2cw@CPU#0g z?N6=FWE}lHdNa^j8Vhva-CvoN8$_C|LcOBCZ<x}z9e6S zye>nt+i7s`E71xQ!KDjLs2F6{q_>?$im*+FmWgVt#49)9rcX49<$C+taC`uuR&G7G zWs~S{WUCP3Do@T^Tv(9XKx#>^N>Za2t(I#zXwj4h~<*GyqOB z>#z5ZwpL-hU*5(+#B8QNX_~?btPc~dJ6vEc8le=xZWN)C2F1v1bI$yqfz_vjn3Ht5}0@Rr-;z(Nz4Zs$-*aQw;!wcQjuNP^>O6ZaNKpN z??bJ*s71>Y^-qB^w4h?^(Fx|}Bo|cutp`#Pk@YW62%@>315({+l{%jpdfT8E2e zHlyiVoZS=Qj|@<*9N_&%y;Cpb{;JQR=5Prq+lPn5Gz>>J6PM$4dm`LPGaM8KHI&A? zjpsbIgm~0_QW(Cq5utWmR2Q6&Lrf0O=8rwVkpa#*W7cS*haGmuPp%gO@DVmCDq~+* z+*v5GKqzFt^V8m7RrB8BLfz!*=wL)V?ZW&QH<$s-a?64%(tYUmPmy1`HM!4Fkf>_YY+ zm2aFeZ;GvvL~z}G#GhU{`-eI_$!T2&8btd)k|(QlceQv+%mJT`lo^YjvKXC?en zbH5*h>gK1mCjHKw{=!(nQIYu+WFbDPgS4SyO2fH2ypK!nYk#k4U7p>+dzYkD~4H)s0{!S;ZCV0I2JNx#|$>^N3=><8UZ66;uQ#d44s{~;~2L~R! zl{VH@G)oZB&^Ypn4-%B_2Gv=AfE7Nc6rmY8{x~ESIFzto3O>|~$x{tO+MhAKZhNo- z7vZM7hi5MhtYMxghFqfg`4(ZTCPVKz# zWS?dYLemrYM(StKQ|P*!K352}>7OI{p=ZV(%i(rsG00W&LmKV)IKtDzT8qXI0*m{`(;z?EYJ-JbS!|AE$yzyk+Dj*>>SZkF_^4&Z4j`{ceb;y*pslQkVk(waAQ;iAZ z#hw~X#yRQfXFC~M!EBJIh#x;{3@Vo@d`Q_OXa;`l6{}5Ti<1nw#;7PGF4ZQV=lhcU zeu_rFJM*@TsuVRA)Mt|_mk|@!NM=dMGvR#UpotraHmWr`PDI$x&E?-}2H)N}4ismp zVCSSFibrub%0FRBac>J14`TVFmTBkY}jRWfnJzuS6Co_v~+&mz8sY zxfz|=k{N`I573I{XXN>Aa*`7a?W(G8%MpOc-*S(WXT9KqXGk^HOoj5 zZdCnrdrdSkio>UBAPQs_jMTd+C`C!Ie#Vz@)WigzL}iEqg2F;9(3m%iN5XNHjTy#{ zVna*A@pq~#8?D=HP200^lAi?T(bNqlH=&xEbA_>FIjj&;kqdSBVV+m<*J;u7@}wnS zBHWiC&g)7#;I_K3zTc7d9eJ#_f4$DfszeOKoXC$TnT&4c&@91EPYquiBnp@kQ*ezd z5W5vcaAy7SIRTYKV{&a@s!vUNk;ML|ECtB0g8f?|SoS+?=MTx9OAVTp#ChRxZ~eZ| z#z>0D@2kCL{>c<0$1n-EL#d~gAb{o%dYjn_)4j`r#B|ghlRv7Ri*i|E9^5mMLIO^3 z)vsr!f0({1d&2lg-;-R|P$=01cU z&i>S=I9#Y}nnHc}#)2HlM9QYN|EO{>{h{(uD7a+_<1))Zb{3V0ynP&XS;P(MuJ4yb z661;%OBdO7-VyK=K$?k5eUv&?LZMi=UvGZj_eW(&IhcjM2mSE48;3?G;U7bo#eel`Sz<)SWI#Z7a(a zPRzI^>Hh?by=IZj*Aw8$ebWDMI>8c!y%(@-9LD25p`KGETKCX|RKx`|9{6(ep~jAy zl125=eMH42)m*9uk3Tb3%EltJlrcsa@}iEs_Iq-O^hq&Ub$nb#6iW9>&oxb~%+n~B zev?uQ$Qu~awcT4gRr7x073gE(O}Leg@8jAksgOJ3ZQB{W_Gm_wkf9eKVVg_(Ai_z( z+ffG%JF8l?PQvhJz6f>}mbVn1rY8RS22e-A=j2$w%*;=D`Z-ThyuxEMyWvdLze`*r-mfS2266xSZH9soKPM`ugjDSO_!?#wi-MI7v zf8@*2(~FR2uI%E>eept6AY&aWaLK2NWC}c+r-P@<(B*~xZ+Y+K+p@${UyraRYBnsW zMeJMQ2@utRPVrT;NX7cBFv?7f$fb}?iiVH|Nq@U;BBj=?larl3L_dvk=g1_FX0 zUd64;r5fdC_;@;B5PiicIY?r7H=FX_hg+?(pl&(iBi({m!o5UA5i`F+*M(l0%l$qv+8=^@_*dN6$-$>$d zu%n87^^e>ZHW4)$e$Z)^PwHJ9&aLk!nN5#mGmRda zuWidZ?xrTXnx_(C%sn7a1TW>U(a}yR2@i;F{4VLREC5)2W$e=-8Wbnob+`q@I^(zV0H9Bk zB^2ML%Wz1T}`G$%v;f)0Pf(__CTWjHv(bH&vob)P*@$eK4&w;Kem z3o1I{2zB1ZABD@hP79|j@ra*6g{!!=e~n}psSE{2xJtxD)UCmDL2B%+!Gn_LDm%|s z{28`DKK=ZCSMXBs78gFa8%IuDdiO0dvBYR8yiPeqRC=Bz)hX3J9KU&&ahMi~>pl?#FvU*9-uoImuz6*qR|%BtboRyFlhy-G|3z@4zrbYW`vhPvbZ z8(smJkPtj)W_RO*xgg*WjOBa^&&*%880@hbw)QFl6{YE^9aoSg#_mZ^c_L;69EaZ_ z>bemanDoLBAL8S)KK<~FL?46msN54R>U&K-wo0D7^e;8=>UiQivl*9T~BF2#t7TJ@4nOoRi6 z;I=K|W6h(Xt&T}g)Q@6=@4WWe>E&<~f4S=!0y|3Xq8EdgvBMU8;y&AdAkvJr_*z_F?7b=l0Dytq}P*Bi=tAM#ohZc0!C`}wUP$33z${F~NK^*YY3u|8$m4g=Fn z=d{$iqvHfZpGZ}%269zM<3N8jAz8F=t1-vM{(We>XED7ky7Y;yq#2`PrK@dLz1J;|7>VOq^G2~CmE*=@totr zgk{FbRtKxQT`xETOx4sn4mdf_vj;m+;8v3*-TTBB4av<#5IAAtB9Q-Mnp8{d0bo}A zmGW{`HbP+<0-3!wd;=-OIoAu}3)vYofjx^n<7u`tL}e8rl8mS?oe^*Kxot1PY7_x4 ze0!Q9K@IaU;Qg>T z$C6X9WkT>3pVx~LG?p5ICy^NwKWVuUHln}wy|$hcep=)}`9CKS5_mTA)?Z3W%5AV2 z$$T52-Xr*2hW9P`J z=FukEximk4IP!N^&HyOpBnH5-nGK$>0{Xb{s`K(13kK~wI(5$D0QRKHRb%F zB}_)dC~@oI{pZ-UsM7q-!S2QvukPRxOYJnmNwZ|j=h-oY{^NBRrIcgPKUNZp;!#S= zO3(y9RRSt%twKEr@C{9ZMmhA?hL86FYx~iL*AF4)C9@2vGmS)UY)RNdPakVRnikzd z-G}Nrp>=LHufff@Z#-{E$4e;M?ylJFR;p1y*&_ehyg|Qz)FB;}1u@WzpgIuly1#xP z&po$XUl#JtEv~_H`TnKLN9<7yKNM5k0A|`Fl*)VNJDe$uYP_#Q$MWl?i(_@W3tU{C zjpz8`9el5BDcj>xA;=qi|lZOREd@=&|oq2U(oduRP`wA(D54~43Wl-iFUjGqlCM8v+ z#knAa<_Uw%t2zG#%5{CwNY{G8x|5qrU~?oN`KP0p4HLeDspN&5p9a((?t>7Yn?skI zwY}=Y#k}_qUcxSC{G3chlC}y$NY8#RHCm)0rc|Cs)mZ=ko!6;cWcZdB-syFF?41f}`O|-xM?<~}T1ABHYmw*xgn@qQOId6VT z+?wpaJMN0Ps;_WyYs={Tci4%v*&9qr8JCcbRZF?m0LCYI v7)f@rhjZi4le%X{O9zN$j*>$Io)Ed#IYS*Zv5??L#1P)gDg(=|6-3%=q1Jd0gE#1tBgmiZ|11KRN4bmbZ-AIRYcb7Ed&~V51e}DJh z5BI~I*?rE==UHp*SS<}D985|~1Ox;e6=iuH1O%i4c=#O#8vI#pvu+LlLv+_sl12D2 zPJINApxDT$%OD`sCSg5Vp~B;@T$GL65fBJH{{0ZwKhXLhAaHT2$jj*Zn4hkp2N3Hm zpk1&mCBL5$D~O=S-kpF&W`#BZIw~Ih5}D{POYvV7 zll;0G-o#gX04;da5Fo5E=7h~(_U#u=)DFqt^%=kcxAF5K$(f%EJ9EvENANneFP@l@ z$#Sebf(r>Ar4rA}L{bg$eC_O@@_7#M&AL9Ul21_KDj zr6AwzrFznxHqS44pJ`CFHzZbE-FofsmiPw@oi_1D$RCvC6(w-I8A4!(%aj1$)r$*P z=myg4XiQCu{jt31qa%NSm&32SQz{qRIX+G*DKx#eUqUvJgNeBeF$`d5A$X4NGEP6W zpNXrhwS4Ytj7f+&4r52#nua|=7A!(PdZLVGCNt*mA|o;rVNUomI*!FXWr-HuYL4{b zWf=K*b}bm;+m|7~zyk-YNQbC?nxK}*D#ylud1*)d)KHZy78%{VTwD&Uw~I^5-MKJS zzbYZ}{L-C|4aO}vV8|XCZULm$)cYYwxYg511`#ORIe!dg)vKdx{GJzOeI306E6PUI zrir9&Fpk`ubXo26rrqD)FSF>t+*hZL-Y$+~WEP>g0Z9Hb^XrSxRmap|V=KRE@L^(N zrWdD2MC-@}pqaMqL^Ivz9H)&~4a98OY85k73Bf8x0LoL>?0%{WNgw5B`3p3-i=s~g zi!a#y>FgeKPiFvcFV`OnL6DWNex{6S4`j(@j-alf9_Rz8t zYcC(=tqW~SawMXZ-3LM$ttc74TqE`dV8X8o3`p3jR0EeW6v3vQR#ZcAq8g)N>fo%v z*~U3wxgNObZVda@YHVb+(!(eA{CVZ9P8D5d4;U zq&D$7k1meHOt7Dq#*Q2^#QYNa0h5!0AIT=zESiW)A3RlNg`vwzkeA9SSKQ1L2u;r; zaN-@zwT^#3aXfulw3V05^xxw6)qClf^g~!<<*C*ad43`{aXS)An-`LbIJ>q+B85#8 z@x(#8^Q$qTJ}>g{i69a-D02}X+kf~ueDd#4O#%SLtBt>v7YhX&Q}wFMbkBC50yDca zgvV%s#GU?4jI!mwcxG6(#c6DWXi5=J2YL7~KNAn6JDJDmC}8%EOe3W`t@SiKiCu;y zE_FD5eDr)_Cw+ND4l9#@9}JrRw$7+tZ7dq}>~DF%di8`2)EF;EBR&juRjai|qN0&9 z$PIJlQ>OpQixP(z6V>S*f@ecrM0y+6<`yPanyOQ!4tuDq@2;DT z302DpMXSfMB7Jzd`AIsGqhTFs^ud_y$`>w|+gS=~i9ocxCi}=h{!#`e5e27|>}+hY zk2u^_W{I1Vyx(l!U0AIdXNcJ%Jc4&FLc;b7Ux6p9-zqI(wfQbMrCzc}k<66l+jh3c zEZDOhDioPFj5I$C(Y7T4!rQX2qHc~uy?#^9pl3+;EFxXLdR5aG-C4@4%m=WDTiZ9iUGIeyQxtnnwP?op{x9E8^rMM!o#N_$%zZcfE&#L_$E=XAylI z_sFe9BfaA?o~@ki)@jzoRJ;`{_{YPmapG?!+=gNC3r^jkNOoT2tf?)+qM*OdRIIB{ zar3l-veGWBADouBTaBk$>==nJhQb?6nzmMgc7VQ{x{vjCMB>+e`6_8~#32aQ86?QUO0agI50rV^2!D z{R;baGH23ssnRcrLP8_-}h9xNYc^a z1Bqo795{Bjqxf=j>ul!wrvSlg!7-Jku>+_8+8*P=5dr-9vr%5$v3tqOLm)LMr-0 zuFQ#>!wYm++3-!K&?~~;?Q5A#qMDB<=37`nYMa9T8yy8j1@QUvwXIe)U(iw@P7<=5 zRyWn{ldNx(XPH5H zwLS%hK`lx_zR0+oP#8AoyX)!QZ?Lw)I8V&25b|^0w#IV;5j&TUrpP8Z=`)mE)bTa< zvnNeW5aqJ&K4x4H@w2?`8&shVqt?}E^4FWRzm)-gPj`#omQ>M#KBec4)4M{s(2U2NpilW9U_>c=j@q9a@JgD$bt1oO1yKu*Wd(*`(ZDL_iMMm zS2ykQqc&@Wg=O;5dMux;*`~;#@llLSTUp!1zM(mR-;vm<^S?o;|C4W`o@uj zh3Djqc_PwpHLE}1udc1SEZvC00OFw?O14rg&mj{X4=$tUh$aank$=g@$oT+5-nk*+ z9W*qO?-;(79ud?1W@A1+Bp{|pxcK&dDV~yqh-1TlV_%)X<$>VrK_cvCkc%~+mObNh#MQfRNlK8D%IFg*|*Y@&^A6$DgZ~mBNKhU$?K{pdnlt5)D$6 zLKnYsOb#X+&CtJ_{X_zOzOgJGeuhdF4xazvks9Q|3hsXXDK^<2WcKaQW6}EMLkM844c4`Yah%|t%FeLSPhGyX8a%_Hs3t_bbYsGq}=sv4CD$~8-3=tN>dnf5O% ztIz`FIeROcj|nRAHal78ibW=Ejcy}lEUB0g5lTaC^XZ!8@d6u~y@P*`hx9%+o`>j^ z_f1x}Zgo5VskND5S0i7<`%-_}N+X7-E;yJlE%^f-Jzg8br4YZ}?uF7J>xIVD(NV3V z5^ky{w*Q$b&%#pPt}HYQysyaTPAN71H)kyAoA0nAb14|V(y%ueub1Zx&Y>2^k*03B77q+7uzcr7HZ)mW4`?)GrSxu!tkeo-;20wkfKj#AEP_EV21Bjn@>dSe+({6E~ z2v}?BI0uS2z83xdvKM^gH_Rc|2|h3jaaPqb$UMC zlLmo-4R*F57M4M^oSQxSSAp-*?0chI(-sR`Jg@tk8vB}Cu-+Rw&Xv*I>-~V#N%)P9 z?o&9rH%wU$T%|Rid24ErThJw;%Q6;i**b^g_~U`Pcgux??=U$z=ZHg2UGMJIArC=- zFV2r7<|V!o3T=HhuO*YP*&8tJh65EG~$?V`@pUm)F+yu|EU2=-}|Td{0)270UX z)q;Uh+dtn;2JtNql7m}9yTo#VUpVUS&wL2(``)N+bNdj8_mgY6zA}e~NH#yP1n`{7 zrF;q8yH5}FZqIO#*ctawSvC8n(`^oZC6r}TYC&k>`3eYZ&uAQ8@=5Qc>ulub6V-=> z`S~^vTf}(yaJQFD#7+W^%N&3PtS&PL$-sy>)MbaDQyO@h+HQ8y@MbkF z9DO;cYDO;)U)o_@_9mrlXPl&;fySQV$CAuXUhAr_tUsG&GA;7OA(RI5=g>-E9cWXD=9S;vo#%M9MJ zJ9-sbq~W5T@;B>phz&^Z1{1os+z(v0p|n~bzvueCFoeWa|1}W_`_rVR)RD+qyVm{eH9Uv0>V4zIK0=F7 z8nk>l`Y9Z6LOj>@CSa|IXxzLd?&E^K#3LZ8(D4f*Kl=0pgordB%sb;3pZMxZ!u0B5i7{!MjZ*pIhrvZXxBptZBW z0Tm-(O0t3Hn|7v%5gr6r&)&x^Ijvd;in}V+9{PgYzc*`(&wp^~*wGGtSjgu&EB4$> z!yO1+l*v#z^nAlDS@KnI4R+yGpV;q^XJo%3*N#>fcUKu%5QEd*S}#N)o`94X1*JcK zTZuN`CYndP(3Sx63n>N;*5Da3dM)f_zeq31iCoH|MqCjMb*@-YqEm75_ezLOC|Oe) zl1mzzC-9pA9x)6mPuOt~{fubX?nd(C)_ji+eq@Va78vDq+JJbq6pN9XJ#Oi2Jw>5e z{InZmCJ+f04SHbacys?N_hzXPvKv|D03>{TEXOcmqEb-BoD3Beo}+T=C4FxEPhX-t zQNgVv!Gfu)2JsK1eO?KY_F>FBirwd*r4+eL<3gpzdST&81dNGQyqz?z13z$*LIpEm z6f&nOg-A{eJSp*eP`n7iQ`Hl0I8(%jr7SDgUCUzgJ zcWFS$4UIu-k9!EHw-AJ{RHq zjN58+AXSG_LZtUgk70u=<1cVoRIK@1`*$8{oc2M}fCN#`^rR@7HU`!Zjc?#-^VRt` z64db|JrmbK-Ba&uE>x;J$wjRQ$ERb1v&(#W4pBcqI%w-ZyAG@-vu#-8kM4^4z28fd zC}2>Q1t*+ts4J{kff2P+XW6wS?6{aG-_QhQOW@p@n(g+}($KgtlT-&j;35lBVxJ!; zU^2(`N~2zE|D`g7UW;Pd>f*C~`g=V8YN{4kFDCGHu1eikJ)ZG^$MSl+L5uYF+lJGl zh0WnDgfEm14?&cqPK#kXSwW@z-a=pu!N7x#c1{3k!m|4D&gj1SmVsi^Wg2Yn%s+3@A``MT{)6pFzi(}&B@ly zByGyP<1bC(K7Sak%->aN_YVQ_$TrX2J*WPcJKN_k&(Als{quX*Q?6H>_ZPk8LoA)H zZSYe!gA5um(rRauBo(|7H$vNl943dzf#o}=?7;D7tXDd_#SieL250ud2T`rbPPtnYK2i1`pJtM`u;ARpf7 z9rAe!wyM7XxM8piL3>_&bsP95m_Ax5=s2-D6?LV2&1n%k@l{afA;|30>+u@?nUVs9 z1ooJ?gdzk#gbL8z`%5Blf&Aqc#ME_{@~>&U1)4nHS1-ld2h|4#I?#dsLv+Md#<BoP1zVymSbk^7>C zDA6i1MMMjT%}`#k+0NHU>Oa=y{wj&4c4PXOSLTl^=+Py_C3keh_CkQ) zTR7WDS?2g=An>z?c9L|1K#T@tj}cQ9my>RZOs2f$@V90WPA~K zV9|f<6K;b}ESl%BXQeb(lDpOM1LLL@qEFxk*n;-`y4fM3fbR%OZ5%Req6T% zzmI2s-Nf4z$aEM>2h@qjoK)3cezI9}0&&_RsG3eHRc-jE5+XJumvsK*F z^L@6$E;tQz)(x3pPYX0s4rVZ{4h_Y_1{1?NJ1oiXdf{PNM`&f(!~xeWE!(abB+52e z;I`cK?+Vc$)N7-{a?f-5`7jLTEEEbMBj=}K@K*gNX~7vWP*3RGX4B1z~_?g z+Ig!2hd?*%<$4G1!KmQXMgjaZ6vsl>W}U_uz~HYt%a7n_u^U=Sf9X7>hJsHvK_ZGo zHGK2CoG}Q--?U`lTT30*9XGgjt@Ihj3N3adk>P*5r-9@O(o{a5qmP+2pa>k#Mx1Ha z)DETtVb5;$1G~dNU8fev<~R%nX6=X)?h*joz6tDlE?X0$8L}%ej(ImD`0PVe39OHS z5-uo$ClWDuAN2>1Q8#)%W9A7etg75mcOXVeT+y*|s-f}v>T`1oFu!JC;zVM`+(q8j zu`ctcR$XZpB|kr_pV|EK0$yC1Ug{`X+wglCv-Nj1dWrP#+x7Ge-C$%NxO1?})2+GI zz6{#M)3i?#Z(}Kx-ypJ@R|Jcv7_hOD*&kgD05I{$$X0`?l}`!1bEYK^!>{phKX=_2 z>$n$~@%V4Rmv3U3e`t{RrFI9YVdn=Lwj-|VkB_(PCWR-3)Gk+Na~%t z8@teQKly_*!Is9>QB=yHM*hNqV{PDs`B)Pdfuh&VG!S&7UA2 zo<$9p7rkHUyG7PEJu-Zjk-1>k4Z*Z&zr>ah&NV+!3ORHw{#*S`h)$RRDe`JB?fP^$ zu#bgas^NjT;c4mS<&g$N+A_&KuoxWoU9~o{*mE6SBQX(bN=!roKt(A8 zElulwM1t^xV_bD>d&;yLvCpKg(BDA)bsseH#G=n=#1N)r>PSZe<6Fs;5GQpKHZ-zj zCGqgyT%IAUF)l|XvNaL#yTt@bYR+i8{k*#&%C%9_heAlc5;v0;)H@H?U_5r5akCGzv? zz3cih_4$bNYnYvn#~Vuhawa)y)@;dU4;pV;bW7+YB6K-XwiLOOW*$%ITta$s&SaK1 zO&rYgt{$WFa3u|smZXs(a`NHYYti$OiNs=O$rsJH@%a!acq$Q*Dfh6mQ@z|npCra< zW~yBfK#|I$m)xj2c>feVS*-ps^`SU`g}uGj@Go~t*(84R#Q9>mPapZ7Q5X)S?te}`a_GfQMYnL zs5;4rXkcrX_Fy+5$7O1>^e+|fhat-V5liwbAHPB^S02cd6+kuZ;#X2ulQzw_)+mmL7ygyC}R|CU*BM(asAt`M6$UH)rd zM5!lW&UEG^9zpRZEJ&pz9n_}2MOMZ0M|s;OAu&LW4C!7=0)lVN zds@}S-rEv^DY1M>26#oWyggmIM{?R+4kv*k(fj#;9PMHcHeaK=iL54G=RHwljnYk( z;lt%itZy^#T$fZ_X?JbgT{In7Y?Cvs8g`3&&1HJ+XL)>Kb@hQRVF2^9_LQ*O)f>_=GijFnd99h@ zN?1Xe4Q)YsQ&W43vL;Kdf%9tLZDjoC+sT*Vbmtgz)#jGXl}?Ky#XVJ*nx^#YHybVf zc*uUZQ6p=BR;5ter8TP4l>qDsq`NXTHUdhDSY{4`t;48O+qvF{$dtK{4dofI-xuFk zR8POJ)JWcYoI=`(rPH9Iyuv6ZUeAd%qoi_XWzBZZa6FG3brJ+lZr9bYnFeWy0&D9q zK9jOz=Id*+fJ%Sb-KDwJvFNIu7622Uh`Z9&x_AtyD1K(Z?CgSmrw=I)IQiAd~ zfa;8(;;`xY{YY;g%&R{;ef5gl)1T;G2Q`ukNoDSr5N;ghzBkqkC7352pepJUb^ZCy zkaP19T6u;-aJwn}!kZD6+a8goe6Er>szd3|1WL*GB1(7d~Ex#8h4 zlJL%6wIu_e&|HPV4Rb36QzzOxQxbyGMO~$na={EFTeQ1900GFM zs^k`|8~)xb*#yqS>X4WTz#6FzHc!-UuvOn-LSTf%vMp|W{}B~UXBIdGAn{~Z zc9wr}AWZUZfqM{ZJGq@4(wDwX0e(>l5Xl7&m``*CikLe(k0Qd^5;!#?(N}u@|B@um zvTD`vbWWQxujfiIT$4PJ(p)vAAY(bJf5T-7Z&zn~cWpco&gVlqfStftxX8Z0k^LRs zGW@L_UANGj{|R}n62Vy*=QtiX^<+4HvF8J)XygLGgm4WQdn2O{o}~;8dCi2tp7wue z9JPOK5}YBzJDpv$JPfCa|7+9p9})HMhJeXG=J;RIUWR@;nxo5`dV1iMuZAl|AdYbd zV43%RvcY(U@Lz%2n`l8G#pDstyGLy-QwT?SN+wHw)QxV1UYCkW(@to_XOhzvtoA2G zNA0a!k|5uFv-4%X*N`yhp(zNw!Mbrk?+A7i$$7;%z=$9g& zIB1u@e{4NA)_Z09FXOrO}!cMT_R_!&=PJ_=aUGgmx!$TI>!zk9G04F)JAq_xn+S4t3XFF z57`_VoTl-oh^MbwS~e%Bnh1!gkt8B#LlKwZLJ->quBV_%E4R`&t$@)@5C9cu z(U$G8z#1X7dfjIrR9tm&;cqS3EB!^aDJLi_4Gm5wT|D_A=S;y{@slewPW|Wxv ztcc7x9vhO|$jyt$POxULTck7!5=;X&#wNIo>K!%>8E>0$+1#aoQVD^dL)w9G(;Y4S$A+tO9Xhn6ydYq z3)9j_ar-O8>s4aNGv_-#i3)q1Ayw6;Nd!^U7igE6HoY#ue(s{UL#elefFG`#AGAV&G^x^pJcJtte@HMMhJ;nk^A0q`|5+q_{#7_xc$pgW~0w(1K<;7Q_q-!QiW zHqDhWB8_ooN$sVJ^V=&TbE2LRe!5c+EWR*ZbMowE4RbvD{lI~*4MLJKvb0hI?-0pL z%Ge3&L2lDNB~N?ASl2Rx2EHJPAk3OZ!77$Z6;`uK%o5y_@I5i_f{jgW@(Vq0)7w8^ zvBSc~rEPA$kh;`0rAsvSvr3QD>WN&8J(QBE789D_Qp-*NQ>NUH9iZ7T8c|3Nq~(tg zBDdF-`&9hS*SOAR;Gy2>7%nQ!jqeAj$Wh*(EeLVwn;pF9pg7)_Z7Bu#_lie~gfSMD z1=t@(GS`DLlA4iutFhN(`v394BDyZ~ne_8;`{*@>VxGiP&J&tK=i4*P(j1$4GeLG!eu zid=>1xdCJqWCCu<;b5>k17KErGixLbwlcOW6qIxEVZtOE!eg@i?8QUw=ob*H(;qi- z5%Wz~IF&0j2`<^bdaJ)VA9~&FdM=3;w3dMBLOLwMC%umGjR;ZTO&C%&k_^FTR-<~} zPdrK4d@2!}>d{GzUD4>B_a9g{Ph{~}W`CF=Gq=Z$bl(XTl5Ja`62k>;C8Z*(G}VDx zBYn!{bl2?CZ~B%`&vJ*;B?2RXhFP+eglSS0@jNDteaju_WsU&{VqngXAZ%97-!5r)+&}Wt@TlDt&ViK* zt)E(BR0X}r;$iV`VH9I;zVJAgS~|v}W(6zs>oC{2PMN+bH&=kQ#@&>Yrq5Jyx*R-O zL$bP1BqZ%3ao|G4LXwHqbYbyDmmf0zj+EU`mK7U@vls#X(K}xR@JVn?IL3g0OS?P;#k`ZGml14T6Hr&5#jLG^X^K#Db15Kf8wOz-)E7Pl*p0UgNPNHQ4 z)V=imU|-Ewea6Fl^@op5zWmeyQr*9neMwBZMh&sK1{vADvHZw<{)rGQIkRJzMeJIh zt#6z`$=FEZt)(#i{9RXTg>o?2Uf~=>%=L4D-1+Z>d=Q6DMLEm6qNwF{G`srX@WtRd zeRF$*Hj$AzP@P{)>^6TRS$eOdnh^bP_2W0kqZ|JA?>U;wuS<$l^XWMJWF5;L89bu< zk;VlzOHz`}rc^u}XmSWxk0f-o4C1pA`$T~Qe_BpaMTR@W8?seGfG}F7<4oaUfw}Gl z=8y6oNOKgf>EZ-n`J6Iy7amqP%zEGc==4dVK#wCeWt7{r(;hpgJ`_R65~9|WmA z*wuj}q1qQp3VEFFn|Fhwd5i;Uh~LM4l1ZcfCsU*Sld0FiSCt}+L=c1I{<(Dr)3D%w z_mLnSi2s%FV~udzd;cE>a;Ay?-&cv}UH<_rIF|UIB!421A2U2AQnax1f*9sC$0|)g T{}z6k8bL)tL;i=XW!V1$&F5(s literal 0 HcmV?d00001 diff --git a/documentation/assets/nodes/btroot.png b/documentation/assets/nodes/btroot.png new file mode 100644 index 0000000000000000000000000000000000000000..0edbb6531174afa8fada178e88fc2289727f5d3b GIT binary patch literal 24131 zcmd43WmFwa6eWtgySoH;*Wm668rxckL5xI=J)yIdr=1$TFs;B(3MX4cHC_x``N z8tCrZR9BzVb?0t7HHFl1R72{kY4V|5BRz{sV5lNw?$cr&l;ZkXW7s` zSVJpA{=fH_&q-FRTI8>`&%YAAY2}ML(Rw<4QduRA!g|O0ZL-Uv%Shp}|As{XP4%KbkZRK-=2;+Cr}Spqp3v?1Rhmgl&jE!HRT~(od0PgtrfgM$y3-c}e&_ zTB8e*{Cp=%PoATehnP6uDIe1Q2o1)jv&OP4mz%f@hBGMT$jKq;XiD`0A?|we9+^?h zhje#`j+RUjm!lSjpR#3ZU!wchNk%~dm=w>-Yl&oNWn7>;0y2#$RJ0?gx2T)nDD>bi zlTV;zPdG5P!~$wuvO~6^Z{(daMd>&hi6&QtYImlLvV{HNQ|OcXYi4Q1EB=fKQXC}= z zOd{+L!+^65GV2AE5PCI>KO1N_H%kj+f&f6EFYNdC`H15%DWY0GpAkoiAUsGCfr6hN zLD`@Kh$&}8H6;sA`9q@VFOyo!Wpa2pCAn~p8pNB|X_(A%iP+J0I-4=CbuyFW3FU4V zg^BUzJ}F%D!nz#AXJQ;|rUmLPbjm8VdP5-lbcitaf!xU+dFj|q9ChuWdQ?$sePHiO%#PtkKiAi9F z?SeaNsR3pd_I6-2-mwKbJnzdZe>$Hrp1!x2(MUY0<3k)}`rI!loksu8~xyr~h`DaoA>_A$Y>}%#UE?lasR+KYi zzt2xj4(>ibuhs3q5Sz6YTH|cLqHM$C&x3_*SoZg%p zkjLY(5suYsyPk&iX9x9?sTK}2=D#Z^LjCP+;+wvxrS%ggB@6XX^CAr?^S!;rw_kn6 zoD|aUpIe0MTy75R{KY}R{>W{@#;Xxm`MpjII=+7iUidArY`sND!MI@eX?5wFp{Z%e z$^$7_@l9Wm7>Qn|3$E%M_;4-*?IvbyR>LZ5gL8v`i^MNQ>R3Q>B{xBr+wgmz7Q| zk7^A`y}DqCT4F8Tw|{qXqTkb`$_O@$b#Q5x7*$hxmI_N2sLNAs4g`l_Tt@cKUEJ17CqN-j}>Cq!sbu z8nXYQ$nQRw31_r@fM&ucc?i9$ZwyD`DmI+XB=)r40$9J(P^F~8TAZIr{L%%HaW7Vb zv&+kwX$=hx10oJB%iMkyQIU(OhIr@zQxUIqw2hAj?L1#jp+|hwk$k%ySO&iL=NHx< z3_C4q=};(7WbwLfVYJ2m04wxl%3@-=T;1@YY;3GTK03+mSmI2^jZeJG&<*Av_V&0%U6;TGw{VdEXBt78k` z|7A7Nh)aLSf4en=I9s4kKDL`kS>=$E6T-4xh=17|)TA);k(Hg$qM0(IPCgOF_O@H} zM^>NA2BPL9g?{92jl&8JPtR8x&iT|fYPvpEPUt9VYmP^2(~ozLLv#X`1p4smHUQLo zE>~pa)S?#T^%)SMT%yGu|KpCWg*B)l;n5z`CpaHn$mKF#)?_=g4Px*A>a5W6G5|Vh zN*qE9%KBly35ra9{lfpkW|4?kg-vp2VWEq(sNv1CQVt z=^p(VeU)Y1)59xp%jKZ|VV?dM*a$60lO2Cxh(8X69wCO*`^je$s}e>TNIOwD!=kXk z+kOHhI}J`W0%$;Cqdj~-s{#%cGCDI<%g7i4bCreIPP}q6r-^aL+UDzuComMY4he&+t#xtRd5_#p6Y&@%&Kh1WF51aIYy*20jV_RsF z3cikQDoiMhJ0ek}*ideZB>}JW&z>R3E$pKLk}YVzA-z3@VgaMI-_n2&$Q3wAXz#p1 z+`_^nPIUXq3Wy1`Ub8?N+S>m;1P(Ae`NMB{%xAu3)nC56;Zt;U# zR1EO=u~qss*+1)~g0GqgEOu}1k&3ppfRw19-iBV{Wjcvw+NpM%k{|Rf0lnzbbzRJJ0emzcj zAeu&v%z$sJLiYlbYM>i!;wT?5Ek=mNBpS=93T6&l`Pc@3%|n19b(z zB@?4Lf<iYy`#~weZ?^5JR6nd!BI_%Y5exi=?%+L%sB!kq(LnV6w zjmYN8#L-MPX~w;kvY)hC(D1)W;vs^sxBAL6{t$xBTwv@?%q=bOjNC34lZOZrpE8qS zvDIsYV@R9${LIaSc5t3lf`+?-&(ClC1Wa)Dk1k(TE0&MXNBuG%9#*Jz3S;o4BbWrSyfL8O`HhH=x>y9b_!Ov79BYo0!bWmH^5a{ zF37kSGld;C_p-hwljA7e4N-89=ptNph~$K6zgZ7YyHO&v3QGh|FBra`y<0vHwPAd~ zZ-q$5KseaXd8p-kj?|Jz`fj=DGGcrrqkcpY0|NJXH;3>op3fvSw@06kzZrOqv}H8A4e2dH56;|3}kCK z3J?DU8lI-mAsZAb&x7;DSer1WSIQ#DlKriy@ss+6qgN=yQk1b{_HRGoy6TY~YXe87 z^icLS@O8lMQ{lSmF!v>`!RtmarzGsC>fQ7sE@4YAT|ZO)CHjFJK1gZwwFMlbfvBmE z6^U{<87>YGEq+h}sC9dAxBb?QwZiijlnZkQ*@qQaSyR*Z^UTEW*Wlb9Y=9FtxhHujVRD8mV4XWidYo~NXxnJUd=In|8YiDZ-V~z7eCd0 zBXp4KCwPJb^4}|X@s&0%r`Pq|mfB2$kUU30em}U<8a>JApDAE02ChHVA^nB?f=n{+ zqt_ux3_3!yrQ_6vIMxn8!}_-~FhSpMn-HL-4k?HNP*e|C$Z#WVMTif;QHoa}6H`F4 zz4<&j3{@9clgG|FQ>Chck0*YjJUVU*4!I^~jVWe-E}~ILR#fNU1ozxp}i7Bq4))N&f> zRy#XVT3kNHL9&J4G%s7;Cz88QP+HbgRn`O$9eMCbp}4!gXv*m7%UjLgS9-~Ff}Xm` zR&3yX$(JS7^8jI8`RQTY`oBN&OG*+QIbZPkf`~b8TeuxIAC<5H6 z(nTqqvrRbH^Cf6Ng=T*QH3O^R)F-6lKalW|_{b>=A%2Nz`)6<%I<}%>J_mJ}heGBE zUhNZ77gjD)PN!I78}-DsE~(E-SaB*zc^k{T>@Tu+piKPO7tcNU8!xnq%aL8Pzs3N) z(*EuOx+O<0xMlM|CMGgunFe-y$2C8Ke|v`_udZZoYmT`nD}X-d`l#Gh1gecY5R~r{ zOyxql$&0ThirA>pzx{Ole9GsCaETbNZ?(&!B=!VwQj(DoMX{jOAw{a<#)*iK3bbX0 zLn6;7RooWYvo|r>I^PQo;&TD3$$>OVmM)4%6CH~eLyk%77IB`vzl;t^y^gNUI7M-1 zZ%6>;9eD|UVKI{glO^#Egz3Hs;O2&R4|IVZ`@)tobKg%j=^h?1cs3)M2mnR4V$%W( z(pT&iiql>z(QI~&J;-}dp1#3O_%Jo26an(4A*z=4Ng}q)*0Hl`fKG0M2U*nKB;sH1 zM6KAt2z%4v@-Zq*rV*BO0Un))=bY;bqaQ3hPac+_0m=Mn>l2+*L(hGZMZ($=ey1M+ z!s7Dp!1OOaH6-#O9?R;c`cr2QRDa5l&mGN0EQ3StGHN585zHkS=YBjyab5;E8gY0Q zKlxh?bPEdPPSzzKJ0d~m=`f!wBGNBk$dn9Z1?Oa`>ICm{YPNufD=QU3fs>|>?71#U zBgv~$Zt7&4%Z9!}3+P3WBOHu@3Zg9jB@T48N$it$jo@__5~5$%3g*-G=p7uvu;F&- zn~|J#I=$w4d0izA<9BE&kA&Z^{)VbfX=0nj4UY(O*Y7~9ytBD4#5&bkqA$63R8c0F z(APKRx6Ekj;SAirqO9{fmEruUj~uxDWr9Lta1ynDpDA^;X~IeJ0!MMm_stkDDi#Wa zchaQlAODDdMywBHyBcmicbL=ON$mnl~96qF9|B6CVa>pWnrB5)7Lu9<3h z@a+Lf0Cwnn2RK6pn9p74t=EnBUrVO&@WmLmfA<&eDSUF)!BQ6|`!T}7l?cga_Gmoe zr1}+$3HLh^vZ0~96oi2lIWRf^1f!&AM+Qc{&}7X94};LSOjpOt1iumQjs{T}@18O` zXTzUyP+<^A+qC9@z=J#m%x8pf@u=ST?PA{6=kv6h0$hhatehk=I|#-(FRRHQu~8&O zBJ?A7be6A;L4);q_L74U3-d#g-5SQ-zZ;@hvCFtr2wUTam5knlNt4zZ0|$Xh%@XC5 zNM+fqZqrO3P*n~s0dH``lsZVlj+3($(Ol^teU%Gu6>$k=M|GrY!`qlu(h>ERO+_(y z;^6ttjpCHBHKnP()AIoudHzjsA0cGKLl8sI;-at7el?7INle-sty-32`y@bdK2e|JH; zd57};pl0eRh+;v>E{SW?5rojvS)fSLfB!oS{Ft>E!1Y0rkf4 zI*gfuQqFZP><6AciH{vO|LErbNALgNPQPL21ERt}X!ar6D7^;VP6DferNgaTn0Xl& zd@4-x(C_1E@j;=Y8W}!#o+Agv}OagD5YjFany zaa$SowL(!i2MF|^z$*t#S3RK4Gky0D0b}`gO<4Kt1`c9$9)qTzV3P3ss^oK$Uxt;! z7*2-mH7iuHORKZ<_eeD(5W%~g59m4V=l^zwdP=#OgAAtjy%Y|Y!o%?5e6h|6ze!!E z+nIcS950UG554&FvO(I(1|^i|M$WfO#kxK#1Sj&I3e7626SA4qJNY`>Ed|%3MI1OP z$Q;Sg7PQUU+P+xD(Y-6+6HE!lwpaimAHN}ORj!E3OgF|h2x&*e`EzIsf^3c>Hl~!r zg|GS6#ytDDl2&^*<=$YspcbVYXbii(_YfBaAXmy3iIY~&h4?WxX_S+}|1n37EYoO0 zNpjnmrOJ^o9H=k8TwXw>+ z>GBZ;G43z|an33=bb2A7)rY&V?l^zvH6Y*FOau98Wfi*kGr!+4kp_*F^O`_hBtLV# zegjE@4)4DE=K+k3&7OQrl??pS3CdV<$u<12M+I^L@{JA};SCC53WCP&ics7d!6~b$ zI9|^uB;&#YR*PeaRX6`g+=X*;>4cXu?M4LdDs8z3Kfz)&Ia3h@B&>F9EGc(RB6~4L=U^pmoaKf-QD z%u?5(j)~ZX^Q>P*@j%q-S3}>vcjTD_#q+0AVPby>J6wjzgip$+Nh3TmYxUJU)TX7AAdL?-&Ud>Q@1?T!isju2g=FCKraWS2&eQ-z+5D<>$ z&*&e>;fowLtnp4U80~227UZ+>&QHl1UEwkZ)PR^DWyzu;IvV9_;L!(d#-nZ2=^`!^ za>-9p@PLR2;PoA0!t8JKilJCw^{dTPt-hV5Y(R+=s*_klSO~bO%0*Ut(D#OKDKo{E z1{&cl5=W|oh@=W6LP!GK%+fh8-}BvW6udVyXag%nvZKgfy++y`@;I-Dz~wxV{)|se zqtDXD0#h61>pbtVlIgz%5&Try%Q~!JHFgv+6X3tcPm=2G9l+NS+4D>r%Z?gvn8c1Y z-+qp@+e->}x`c-wR!SaY4Um|;_;EdtH6 zlJ8E^jIZZZTMqW*aRc<2roCYEC{j8lcJobKh(#c3n?kwyb<%>3(ko?RYRO67E@_S0 zeUBh)*PAertrv>8uGHF3k~*u`>KIV6gd$v;nT-bSu>(>XZ{^-Otv{tYd}9_DgPNHr z=W4m%M7hTL6tEhKV0f0}*03f?)a`?TsL4{~PWE|!!~HMb^6lZLv$$F}K7`$&k#7~3 zLub*v?nh8wx5qj5>9TEZ_oz~LIvd6V+&>EoIoydi0EiFO@t!D>1?{9^NY9^BneOX+ zR-CoWMpIYai*#Yh+YGw;ddMMn>s^{BOqM&WX6~(JFQel}!^R1WCVzLfI3BR0ygA_o zhodACC%2>p{&fPP5w$vMc%6BWtc7|ZcgYua8iT--7~CaWl9b755t}I15(37K?C?c{ z?J1BAPsEI94|%%k_rJMgvOm2q#&yvy)0`TTO-S?SvZqazF)B#vc{jIg!1=6ySavaW z34j0sDuFFFMk+zBm@VIcwDR=~j6W_@Z19QK{GAu?aU?0e^z6ywA}apU(MQCWdzt$p zlyXQ}+~j@`GYMg+S7f1j8RiWeV3$-f=H^Hd;dze))Ob@p| z$uW|Iq2+>7eZsM@4^o?Aj?yD@-$EwPzM2Scy^6z6tBK%S7+_#G<;2lIxJ2;`TCOi( zVlN-_AO$7#ay5EF$`xruvnHY^US-wUU$PYoo%uNH{1Iyii{N8g3*&}@k}VK7K{;e{ zQn$0Hge%=~o>IQ;pw^)S9do>ftUhliaX>1)Gf~)GXTKX)&q4Vx$*Pbl!T+1fv>OSi z&ZJJqh`jqCfq!mpWfb-mKv=L8Z&Wt@vlB^Gn>&yobr{cf)gNqcG?|8QKM(G*46mWg z0Jo;I^YZ0ImNAnJxtmlZkl-#e|1N;k@#Rz-V=HP$RB#E?ECC!mE4$X>55ns6iSUoR z^Khf2lI@Wy-2kIylAV}i#*y(%S|0Zar-7{E(W&xx!+P~AJV7(6AKaC3!i9qc{BHE; z>;3`375>!iiYth!S^C65jdmwJXQ;m*zO&kmeR3t@ z0RKb4H59i)yR*OMZF*BURiNxWSNRnhS=SBN%(QHHUccu_e(Dlc8V|~Hf$?^jZOu}D zemZ8e=kTA^sl~|>%We$R|M>G$%)oL+K}tq_VvJm9%C83fgcvN-0U=-e><6z*pN1gL zxMm5|wfSh6HliOnCALDJ09w)ki+HbKYy2-yBQiz|;**7b7>pPXly6wfsCpufIJ*8K zArr{Q35!&a_WO)gwZU);!$uj^U};w~uVSaGPna4{e%PH#3C9!_Mb=~b6?-q**#YC`3p2MlX5ig z6>#$prQpq_DBw6H#YL?1C(IXm6Il4eL}sP7EGVYQOP?pGLiKEdzb99iL@Nyj4KbcR zS2*q@Le+Xi5cJ(=9&VST^Te0kGX6uGtf!ADZ+@7$_{E=g&+Ais9iA7ZC}$|C zeEqv)UcWFPw~@867(~Wt(uRD9kZ)u^Y@C>hJ^cbTCP~y=mG0*B&X5+r8AOm!r(^Ev zVLvQt{&xl{mPpX6CMKFibb8glYt`bnjoKpe9RjanI{ype3+EE{x#l@oKDic~9lL&~ zA0X#U2l9=?Y9TO$pAl)g#0s;4P#B>_x!`4h^2OmANux#&eRv;C7t`bjZ(2$+!49=& zme9lT3Svpt2J`!iQ=NvUfpxG?up?l(cgS8jk4<5vw~uuUH>i=WL?Ht}=y9GWmcj0r z%^i80?x+zDR(gRwnmW*^+su}79nq0Nu1+DC3T0dhqKJ%EzS^$TBFTrn1vo{g?Y!-s zn8E?#hnC=Tx=aNdo!FUG#9@%o(J$}sr1OcEhIys>2i8&SSqu^aIl`rY6K219cGAv= zWmn{CWNFYK1lyA!xz86Pvn$e!XNU87{cmvQtJW2mf-!a&#VnXt{o!`&Rb!0x#0H;H zqQ!(UT5|mS)Y3n^C$@YR+;%6;pcU@%l+8m;@022iZT|0AQkpE z_xVqWEG*SoZBRD9u>4i5!Po_9p!%04VxeAbde#-Rm2pD^+~lwf_&@tI;KB+Z9Zto@ z+6jGq=QkiJEH8&Yt*Si2tG|!oK)Pw9AfgF=y6q$NINy2#{K6A4WgS$=j&%_z7q@pH zw-fcGS}Hi0%tv<*JvEgu<;-vt9fY}>KP0aR8=QA8`iNq7G z6IBKgdiERxH}Qw4%u+0lDx`uD#Gzb1`$(##$KDh6C2c+EU| zN28nB{FiE4nrs-%6YR#Qi7-E#CXL6`nZ14$%y;qFIw!^BKc}sqb$4w!nmir=O~?ad z-pDvO>~Bq1Tf8+9u4Jos%;YdOcZQS_zMHNq#M7bM=cyTy;_umG>P6V;~j%D&3ui`lNMAn&Tiw!P?1A`rN4Qj*tvVtbpz4NH7PHMt@7+?cl$ zhcq;`g<0o#gQCHpPEfJ0Sb8G{vDOC#i$WxoNh;mjKZJWi8!NdoVQ0!{+@^)MJ=Qup zoW?*KzXr}^tuY|^R7k-o<<6Y={eUgfrC54NEerOEiEspK01pJtOvb%#b2z{8am$@a zDFWG!;mEQF6G3GmLbev?{-(3C^>T(09_zrcKLo}P_iIzT?(=(7;tifNFvnS?p>^ck zuYP!Da;Z?xt$9XkI-Z}2Ujj}%^2v3*51tg~eyWhd#**}>lfoE1HvO5&xI)G1|1q*( zByE1oC~k7O4__{o(6FsMGVA}2T1K?!JVVA6aAi=a0!1m21xud6`8>Y)CeH=e*@Ts#~P}>3rD4e#2jp# z*KBTYek$tDvJ)qi9UPv+QbKWeyt$<)G=uU`R>m66hP*^pk15y0d!2~Yq*5_s%;ror zeqwwodY_4v#Su%C=u9I;!-n={P`9ic%aMFsWN6le`p0>g%aKPQpovX2X6LZa=cV_#D=hxhH!`&a}a0wu40nP{orD= z2}|VO$S0jLG!UYa(47%ZV(XLlK*gfdh_{W4GgdD&!D{~jbMeihzEl4pmyDkVrZ^f0 z=H)jE!WQvXa6u^I)=@MryRMEKnlgrgh;M9Jx}`?B){odfib}j>NzFB-)b1U^yV|W|4V-+RLxDOy1-Bv8sL=SFlYK@zNzwj`!|Rn3 ztF|!-lB7bTJVFfmTDHc$bNP=ErI_fgOal%xK#$7Dz{{(jTUkk?TI;Ka@Yqy~meF5z zS{QVlGLE0k2{7Tz-=rqLj-wHf#A-I5kD8TxF0k=w8;>5{eEL#^cI;|RwQ%tN(5jG{ z)Kb=`ynYDZesD=up^P62YN_>ahtL3yf4^S!D1`lPlj*cBNZca8hd+0%V@nBUvC(|S z!In$w`%&1ZL`ac(>U&_HZM1nvHph=JXAj1quD+T8Ii&76ugFyEx#5@0sE_13s1Q$1 z_#JUy`j7RO8Qkp)Rf_@H_<%F-hpmI(n44<%gv;}I?}P&Ie8Vs`8y(rF+7k^YDxLK3 z`zoia9$?WW?FD)q^$G4x!F;T@^~Hy1Hw?a6$At;$#4ZvzP!5 z#7rOD?1BT;^n&Q%UhgX0jya2jsRk9d0zoh!IV2#f!4Myx74c^}I*CCiz$rR4-y)i3 zk$(t#?FU!yZZX5A-$ft>t)+FyfPlN~R*T({kB??fOx7iDk*I+IODl<$n7b~L;9L>w z=EZ7r1Ue^M-=;R=?q)8aFx+S-ee07vj5gAkgcjbia%SkMQtYCjAJu#uair9r3UU>s z#r%n&)<`;Yl*4EyL<^IFLsF;P7wW7HUnp=Y_ssdSSY-7flbt^8Pw$Fsx4QL$XNJB% zYj}qW-sr`VNeo(}1M&>BTAURJ$q;}})bGgaZVLP6bHjg)7CQ#&tBrjfMixFe=wovW zbf;&3{g$YNo3sL1#SsoSim#}oAqC%Wz}Q9_5EX&r=%FG>0~0G7 z@ZveHfIU*N`G6(B+h3eXuwPXtnNF2R`YUsP=xq4b(=01eHYbh}4^pc`m5{TyiP zLbSwNe|GezcNq$Cu-$lXP%)j;2aox5H3+&o$&h;R39UC_+Ii|=>5S0n9tiHE+X~_J z!Wp(qN66Pdmre@1^U~YNTj!0~M?t~*`wJ3K?yS`UREw7a`r4c_rX(kDkAn#*1{%wP zBOFm2G?nO4+)~0<;YDCDmh@plzH`c@%SbeE&R}e<(NLCsKiOm3E@qp7i#~c+Ku-Cb z#c!Ii71e^>r*HDZD-5gE*OQYIWxkENJYijTBYu~^csKhQ$DtaF13cn!5PEQ~qD~`L zv!haa!a0#jiOW^Nd<0C1k2o))2FvM?e)?}&eiN%?B^-Eu+f1Zt6FLCHjdQ&^P4rxV zjL4eSW(hA!x~tBw_nL@ioS#g8j1uNOB7KZ%-B;M^9oAk{X6&KKoc>f~T{F*!2F0AurYyte!+b3==_?sDljhV1IL&NfQZZ@h-J!l$ z*pM@lem_~@|1|e2K#{6h1g4{~DJ>dKYeIy6ydT1Ym< zE%R9=fvB{MYN7bO8F!6pHC(oZRxRm0c{ z5869@GQ^_Tll_ACXNWPkiS(?90DzXK7#1%I*1Jhj_k1pXmlCGGnVuznEs zM#60Wluz{pFYHX9PFITab7z|TqwNW{2hj5K!6pwrv^?J_p;|oA(>-%zQF19~BOtdEg*~x%tbW0;n-YRPPTv)T10N+Wy}~i~pVWHvo@}jBHCL z`={)EH}Ev10jXuaiXn}~M5zgL1ak93UEYHOc_)hMvW(R^Xf0zHlQ%#e8WWiAx-5Oa z%lmCt!8pulELu``B?4n!52p-i2gao%Wo@aT=qms5kivbG#DoMW5 z72WjD%5i?(uhET4Wy+jxTevVA zosl>Rrhxw0H$M>sY$D&@F+nFS4K0s^M!+spI0<&e&!_>n^Q3}@Z>ye>*EvS=Bdb5% z+RQIOlj=%nU?pVtVhRppL^Ud0;FCr( z4YVr-5)#ss5l{l8XFvwYR)T+Z67M4uOJpZoey^7xE~3>>PS~Zxbzs5h@C$U7j3!f< z8<#E@$B4W|?b?!C1G0tsX6d7X@Bok6OWU*ILj8A3wO{<_?LwcU1I4#q?7s18Rz#=X zzE1zLu>9JN)5Mek+u>8S!hU0EGCc8J5N5dH=%hj-UY?x-C@EDx9BLKP&T2p-6~^m# z#cu6!9443DR(MjIz{<`pRZL^2(k_oWSFi_%03(t4*cX>bOYPs5y3RYfJL_1dP<>Nk z6SFKmo%7_KXFY%rQFKqx+c3eQvX8s4oPn68Qf_C_8pr?5tH7wnFCexQ2p>JmDU$-kpTm4^9E~S9d zc`4G-c?VG?TIos>0gU$hn$P`Sjk2d|qo8T;-=40;7HjnR8oh|mzTWXurI~80=~Q9Q zt`|Y6;{*lHq0U;(#=}=%OMEX`-ew>JMh%P5-g}dc|NjZJMRCrB4bXCv0_x3eW<6d*v?1WcC*em z>&_`Bg8CRIdXEf7_dmdP%U21SFG%_yh!1+)Zn-6-CF3vIB^_nJNZx!&rnF9)jJsSp zVdj*qP0-JG6thJ=s0OXkX{-4#Y7!b0m>+KYJ?3c6`C4&t&-Dh6zu6dOFlACC)9ume z!Pz`i_P6TdI=x)WGU|1rdG1A*%WLNO$5qdTp#cBD#<6>?(dFC4-WG%z=(;k-B?U~Y^&E;sSnR8|*t-pBdhz3pMRjw5Bz;)H= zQG2dhmuGaoPOuH?IhjFz5F;={S!rKz%hibcrz&!sLEFyV66R&$y7L{umm&{6H06Re zi}!O&{Zbh7%9R-AS^pBmcceycHoU1$Lb1O7tJm8l%asn?*oeU}uX&DelpvidDb0nY zL#4+vMkY49Ike+QhPe6yx=9b$ow*t{c*-=!p_elOaCOSobJB=jd4jcCe~hcXSyTEA zrQ`@+J0c~$uAud#lEUZo@?mL+&TltTuDf1Zf^IY@xk7O%?e_)WqM6fwdGZ-15j$PM zr@xDfWVQN%B)&>LK};*Gwd&p=$w-WY8YqCL^Rj)S6^o{6v?fcn{S)y$8qAxvjA=Y? z+A`VHOlj1Xb^8FCowM3%{Fuseol=5~8A0j(yOD`W@P+kVZ#1GeTV)bHxBU+o1{-zT zH8zyO_NCsPYa_C`Bp|i`ZWm4n8twuf5*Jl`Qclp}XgqZrnQHMD%&{N5B!#7uVvR84 zPIvQ6r;lcAT-T8S%B+4F!r1>8ecv+=feCxppSspJ(obZG#sH zuC_UfmFNAFG3St$%6Mf}JH2ifSHotBq;w*8D2OhpC`l>8Z*g(E`42;aLYL%n_k;nt=z5<@K z07uWDFKpSYF2V5L|505*ZOk_l)_Gsh5C%r$s>6oy+PgnqS)KUZRYSw!-ll7uTN1bckd-NS~l`(3Y0X*;2| z6LRf@z6==&Oq$S=F-03fgWi{@(-D0k?)CHI_T@upW{cN@a&iGlE2{M3O5Rv;{^C%Oul_ajV*E%+5sO2yV{_S}XvyZI zDQ(o_n*9=%tWk5vWCjO94e*hg=;lutM#=`;m%W8@0;mE@sZp0ITCJix#+1=9l;CgT z8|y8e7c6p`PDhhAR7D41`XlOgzScIlHF^MP+8VWX(m;dK$$WQxfM6&>Ja>fHhI^Ic z*7X-6{pKjB4wmYRjnLqs*h0HP7}pIb(cEMAn{}beOpahEH>in=<)BQDi>;Z)lfNbl z;Kvgf|BV6Da?YC1Ed9`lkdT0GI~%0P5t6+`9S~f&y1c&+ z1BCJ!8#i3u_y!fbl#&k$s4Qn|95QsL3^-Jcf&tQ_Sb>E0_L^j4n(yoKs&!&^>~#sI zT^MMJ#?n>X5@J3?j7%}p<>Q=W!z^yJ0gnjN6dn^qcpRpzu?AgIM=>v)pjA$Voy1km zeeq71Y(9qmm21C9{}9fDOE9`;*~fe#fHUecT5;Dnn;{St~D(oBfStu;=)Ay5NKJ@7_-PVpzZ(e8rVmXb|jzSFWytqAams$2DUl@f*D2z=6sqfmZB9L_pT%p|#i>b`>N3i!K z`sFg_8%a(CJQ5aib7CMICV39s@*_{Sst{h;myhz!apO^zUhYVhfZ<$aYd~w^D)ZNd zKMoQRtHQ#6PR&R7mxegGfF&EKg$lnDMVWCqD|HcB^xG&mpS~SK72OnNKSo6cM;8|Q z6j1UfTT$0BxBp5SdnPyi)VJ3o-v)1;%n+?@!;{yatbNF7!n~}Q6=){lUZ_+YWGMHBtlJaE7LR2pq?X!S@6ztUZPaJ((b6F(@L@hY)eR8r#TTpOHO zifee4!xNkiS`8N<(TvVH_nabRe4L%en2ze?8cecYi(FeOHPMH}?CxGJC_Lf;(rS!= z&6%#R&Vgd_M`-;YX51R3){_?^Ok&@V)3FL4UpHal$ zWO10-@E4&G;xp@JQs$9_o6v6$l=b!Qt+V{xGX{Y@l2$^=T14_w_$4SvrGoJlho`oc zFK448j+Uf`RY!r^k{MWsO@l%h5U!ltf3r^c*fjDWcAHg>%Rtylb@+^F;IE~v_Bap) zq3j!9am!<=wX?z#hh@o;8z8E|sH$hrBGG~O3B(@U7?8pGb>8;{(9N=$J~3{#wj(uT z4nOvA4VJB33Ovr_h<$ekt(8+>?6x+!_DmTo0ML+=p2y+5rkN}yR}3c!kiNY=qd-8c z$u6Gsj*SsSK#=4vN2z|Rx;lNb_X~Ypi0y=*w_A%1?DQ%y+W@~^LAh^r&UcBMn1kn( zwAG^G_c%d*OwahS9SaA`#vT}+hHI@s{@GrlQ-DMLXc42Tyso7S@gO8J zm{Nf_%g|JL1@Yppy>{O4aiViLg#%Vu24AHT!XoO;Uqw#4IXC#o10C=89M@Mu!-5hchaqNyauOMllgMK>*P_~Qmge1f)C0?!b z*LhuEV>gtkM~5_!r`BkN|I(~6@_H9uWVb@nS*TLvA-@Yd+Sczd!Ii_N3$c?w*b!js z%rA%epH#8RIv`oB+(N*rm%Z(Ca+qk#V@hob656)z>fZ0Tnsu^c{Hs&yucxcQTqa>g zdxHa(2F*A$jNia1Dc1_WnTS{Nd4?RL1FE9^2dD0<0u4!99oP)1sAc0wKqSc?3 zPeuXE{X8c+H#}|dEm$Op7*dCeFpk~0XTO0Xy_pLsw8C|-H^Ttm>uDrllZvy1rlsY; z(;2{jT1?nRzd941!Ifb{O|WO z7zvfGXj&BG!MNZfvD-A|A2weqf*9JHHgEUccpJYn#a3#A|D9@-8gGIlMh|9Cr&!j; zPo(IWf167=2g=We*=(G6LxyXS6eFZVI$Lc_$!-=u5_1YR)Avcf1M7PtIv@gHYv{3 zH%ajG{b01PsxoQcI{d*G-aA;tRYG7vtIPctxye}zhI6{8IibX4aG9pzf?=!Del-dE z`H=pazlF##fUdkr{QEr&K01fO;k;u8pH9JzDy7j@lBGq69~zL5QcbllFRcWAhzS;) z#q3JgiQac@#`|VW@OjIs#705SKQ@(}hHE=0I%%r3t=~^)}XU;un zo-k7dc2=&73p1gO4nAo*oTm9#0l1(Kn8mZk)uQnT53d%j@;O;4^gWI`ZuC*0q>xqj z1dcNyn`R4MT8Wb%$3~}TU7Rbyaf7&+7{&H#xdLtbE*;!Jv@iGRO4N?Uq|sfVLlP0`UMzJXY_*gWdt77Gx4QCroaeR(03SEQLGm|?H=WN zo}EFGzJvXRf$CWqLe+osySzsXNXsQ9dHzeG*YQV-*NNlDZScQ^r_g*T5B zP%WXM*AVi=|LM*d`u~%m!~Fk%eExXEo5-#IIBj?~Rt|c(M<2wq=%F?T(lESFK#&27 z0QaFHuQk&DqmQ%jimH9sH5~%dAe~BspnweBAThx33NnNYf=JiE(9#Sk!q7-csB{nA zAtEI?bPe4t@Qv^9JKs5Howd$?Fl(>bdq4ZW@9U}?d-eL`>+TQQ819pF=#MRi`=r2m zRFW$yJ}Pwew1&g-RGua0OIj5>zKQ71Xpz0XNm9mGwffWh_?T^s4dO(Yikh18e{$$^ zy#FhQmR5l^(mEk64*FsP@G;jlo4GW#?q?UFOI<|o;bQI1EPcR-SmNh&g~-RwBT+X$ zL_*74dFDUeTO=VFL1wSz-_nL+Eh68Mt!QclF4i5~5FdG{zzRF{L#HQv@LM%o6$izH z#F-(o#E0I`p5&QlrF-P64_dPY^Hy(OWF3y@w4P=$7Sd>7v!;BQ2M2`pPJTWw{at!> zuUKNQj!DN3*r3)JG@t(eA6K(EY*L+_QaV5)D3sk_+H7&Vr>U=5%L%O|I2FD>1si(MbO1}1z_icBFbh}mW5-++V zI0xrFVbUhGj@XX2p-v^i#qPC?|F~|?G7N5(g0Jt@4b0{|Y?Yzbw;!RADrZsa`b}=C z*PpK$Z}b-4`-e?4Pd7<>I+%v@2qpq41uy{gI0(=G7eevyKWEuw*j zI=zTf--8p~tMf;O)3#f*2#ld8Qa$v#!yibKJ9YKWJR4bQ0=QIFe|Z~`e761O1eG@3 z8c59`GkAlo^vC%}CT}3}*{qP8QXl>>y5cF6>PI&Kb6B&MV>v$14BQk5Gy@{aWEsqnYIz%WwbY@AKDC*Ygc;Q=}Jdga|Xf!(IVe4t9RAW+mghD&xtv z7>g}`ii^UfEoT?sT!HI#s@qO|c{u9LxcG#FL%;0aRB!v*+m_+UiQjj7akzG)LO1nj zbp1hI*WnR*1wdW4Bax%9pP4F(4pcCn{p{?>eU^-?lymklbW$BQym;&Y;wm5`^{FAT-kNTi<8J`OrQyC-s|g0{xj4 zUk}nOm_Ge%Q9p35!>Ah{!)G+Jbw+m06E-FPR8CC)?Yg)}Y(mQXVAFZ0v(dz?rr-dB z4JcR7)>b$U$Skef&nKr9ZH;d5`m8@)adgP3tycW*xXqmmhjPaE|M2sfuoLHpZowI| zd~-bMUuHE~_32ZU7phI1hbl5@@5S1Nn8QHFd36!9H4T!SVxP;nw)AyP4s;w7%d%)# zZMM7%>wrF=zYxw^)FJX(K+WSdvGk7l0-z(kw%@ut&2yESos%L|d+8EtZ}gr5BNx}=5rb% z;JgG+F0+wA%U0rc0#z>k!uJb=<1R+?bZ(fgqlZohKNg7NhoIqaXyidF~uC%3l^HzfdqFR);Z;v~aA&nuBg?monT-c){BdQ|xxnf@pOFs0t zn^juRQw?QHQ9gd@&z17yjA25D*juw31F2vmHF@G$!&#V8xPYzAk^aXtLg|v9ptR6^ zX*VL2x$l4&rrHvV{(l4WDp_uV6)V^D))b-FwB%tF z@dfDnja{UW!2qIKKtMbfecaelcF#~xflv+iBvi?iXie=Wlhwh%;@cT%G|C_R4Ip#@ zntZ1xiGhr!uIU8oO0k%;Dx;508@%w3%yX-%mjPakj_$;LBH1d@a<~Z^D>9`VY(rD3 zg(29hp$cT|qg%k(pag=SUyXVY^7nZefY=}!%saw9zjC8K1Py=)UJJgCJIIhwY<=)J ziD_VvaR)ofnL54 zBr)z2!F*VzxK*yeU4tw2t zhlJAU*!@;;FlAO70^?0fD>{~tN~CB`EBZ3UTzUujy`8VIfwCWGLmqP(zL!q`CSDBu z@Oz7+Tx>>$C8N0pFCf{9fx~+nmgPA)9G)k_#yA)i4C&qienoW- z=#xf0f{bypBqZFQFz40Of=g9>-x&V0peaQIc|%)sauU;`Hy!2Q^h+IizN2dJztIh; z4uo@ezxP*zh6tk`JAXz^OZCyZCkrbV-G!78=JkZat@H}lB#Y;&MYhj&l^3J)4dE+W z;lod}$p^>Dj_|s&0=_g)_JE#vS!Xp!$bH1@$JX4Lk(1F&w0XH-@Sj_!ez?+A<&ho+RRC9UsbD2I( zOytbnCt6;-7J>}bxD9@rWkWyy9`{1Afb7^|M9xWqrja#TG{a6aTCw$?{X)xS_@^u( zk>e>&?3`j$U!rJ|J9qpw{K%_M<-F74)tQOMzrBlJS!rQPDtq}0T4yR%G9Q&Fn&Wlf z9RCHx^NIJNQhST~bhEqUOBx}iHmd@({df)WEEyX9$&~DS6?$Dj|$& z3<9g4Tb(64Vp1I`#0~H^=N%+;amp#IZ#`o|k@(9&o095YtNR`5RGQRmuD&CW7V|NF z`)ccT8|;pgGbE%Z+3iLe_&Fb=*x@xo(jcK|l7JRYhUO{|w4WNG?6ZtfA7D*^D>DYdc^!Swff?-nV$*b`87gE!!5d-5c zx7}d-mm-z}y2MNYh0pl+1MF_s^Qp~KsI zZ`*LmKYvL-*F)KesLDvplez)8wwIBhgV~;rp#2Ko2E7(ksKPHBUF)w~<2dn}OPd~^ zc~L#@OeM{@csrf{d+mQtnS!Mb2FrMFVNXZ)IT)6;@R=tl(1*ui`UW%Z%LvHl9T?2l zx2w04Sya^I@=C5_tZ|%Tm4$atm;V&8IJiZ!Io+=7eboSC-6n*u_X&F3o*47R~kL*U4!2qV3s5T;YGw>U#v5yvO1jL z?gkAqS>$|o?l9fr2mjOJ+4U-k-&~t=Z-vhdK$HNmoMfKZou$^G|MD8zy+Ba^9$jYRW)uNdsi{+8?UWmch+p*wj znm`K7Hx6lKZTn$sS4n~w7q&HfSXWokucyU*dNb%EPEJOsKuQFrICPR{@31VSewn5s zQhPP{@$VZ`=B+ywYZN=xAa=RzvIt%S8U{a)`IPCRAY{TCCb`H9=7ek25{PHiDYulh z=#_(=r7EgT$0ZKA5{RXHx|lfzM{4Uk8xbGbXSZn_xl6U2rW|5jm!>r*%FPl3@bVRZ zZolADQVXS*dCtg^E)iZ*DO!dKjEuh6UzwfB=U$2(t@Wk`#KkBZKs1KBx=0kw%^Q#h zyaDMlwEjrX!bAmVv@XYzGNxuve7)xSeg}ek7wu?9(%WQL_m*u z#^03za}OKtR4)E`6Dl^T74d>l39BvWCH1C)q!!%7G3SrjCyq0PjPAkIqYAGH9fd&2 zw2RnPJ%mSGPbih!JQUE`jx&qe<}B*HNCF+Af_vsjTI1K@qPxPVw(Wd z*DITLf|Z_gGtx%WcCZgfWh!=4z@mHT8>rh~m3kvE_oDXxLo}b7=E!j3q&$NiX!6YCIIr<5W zKP}?{w}DCF;7IuPZ8+9Uscn`RCa8{3%pEJcm4Wawc>C|lLz8Dcdd5>;uRL>{SridD zsm$#)e9nO^L>N{X^HR!>_hOZ2%c&b`KmTedNY>CueDUp5b4eEU*HMMW&kH2fT$$WK z4!}Le2PrD^CgK(M-I`lr^weC>i@{7>h1%*Z2fiA={9|>^MEyHBpWEwYpYqkh86?6C zd0evwLO74|fY*vIkSk~yGz(ADkd!}3C`6~pQ=l40%77{Bp6O~rp@V{TqL*I4_~U*8 z#d?6|7)~fG@AhQO;;G~Go5+#hY-Z}XJagaKRB-?w^g+x-!5NIAiL|fFj6?Dk-VT zfXkuLwPE6SV;NFzYyD5*GMonyANfuMglSyIM}EJQ%%_aeIMsc0DvwD8muK>MJS+;D zm(P~g>Dk#BI837(ip*^ns&S*%eifOzc)ptU+mMOc_z^LAzk`%5sh5fHvLj~(issY93t=~^k7*)Vq z0!p8VDf34P5SvJt=^e`K0%k(FbczdQ3gEGr1@Qu%cBNe(+!#5A_KNl7oM|6^H>6JW zA%J)|W{@WKa~+FivzGjhiLp$TmDXlvw%kA$4B?y)H|D=rrurs*!P1_$RmMB@owD}Z z|JvGfX6N}4RdGFH<7rt;Bs^DkaUo*Oq6rbB9%*(2U4gqTBYeEIe)%UA(M#MRiNi5! z%o=B+%N8ZrF=&Tq-DfhFO6m73V?~A15y2v4yExlrpQ?67-&M?TgNz?`b(!Z;2{FWj z^7?g(8fiCw#M_E5^}VpX{18w)U-B67KEz;sFh|ewsL-f~gI5`I6drLrg`IBA;`eMD zc1VEn)%bC&((oH# zw&l;{FUFOYqS`t!m3Dos+qNJpF5#CJ77Rwhkji=tR=^N)-O-WkG;;WezfVE#D}rti zMbVW~s^n{zbetr@CqSjsGOp-O2eB(Jo0j=Oi&;vjPQ5;P8xQIZmu>Z7TBQ?G{za!# z0gV$tirWVdXc@KNF5sePOl(XgvG-nu7TOw|+Wel-FbDV%wCzvFiq5z7ZOnjQG<zBVO4?$D;`g5$0`d*mWtud9 z7}n7lKV6^|kaX%SSnhJM+@uq9$>Pp>Rn?LFvx?{oY&;H5Ouirtg2jQtT+*2=7e`lZ z)%P|=K}Fc3S0ph?eaS+VpqSArF{70V)lXS{uw7|48Z(pn&U!~_%b%#UF@4WNjIhO8 zRKN3~>|jx3Yty?nobBQ^e`Qp>3F;M93Ka2Id? z50uSL-%9|*oNvV{+CwXUx(z1*OTIY{zwG}&DkLtha(UY(YCmcqNJXu&<`SMB zcQVm<@tEh^T^ueF>Wrs|-A#OWjH%+q|J7kcVJYjv$sX`lhd> zYYBoml@Q%N9~Rvm617eeaGGz7rWQzEx$G5(9sj{U{}X^_GxyjyQ4VFYe&WyTlaAA~ z@O$soMzM~RYBCIEtsz-9kb#X@S(kij@B^C-0=ZWa#o|t{qm)osqa|{+*Og@9=mM(5 zn`t5F*VFW0*OZE}m9b(x7S6}`s(SG$bs&(`UGAVlVg;{4w|6wdKSME}b~q^Fiwca) zhAf?OP#+nka>D3Z@}0y2v_spb`9a~2Ib_x=AqIE6{6;W-wDHz(V*L20f8+98+j*Iz z&0CU&yG?(FU{0AOr4L0l%2XU;dHuccU-cucuoyQ1)W;kHu89#UpQFxaX`kU!%6Wqn zbfO$1@$o&F96e`1NG571F!q!xnvZy~ch;beXT@4JGA^Wd#-u*Dj#30c5|!JQQ2K{O zq_CU1{2h5AcTX8b$rHCIEe7Y^W!x8Y0=Uw|Gs4#dZPGRHX7nQ5~q)6x6h>)R|mnb_B_sII5}{ z4n8)~Gt+$3W@faGicC}Pmhgz3)4$mUI+jyIvAPp+l%(h(dPV)p>ry8Dx)hF){0K@>1XDzuic%2%>w8C+QxLfMXh8#$#`vX;%M0Uc@Y1`G)+l zZxX|Xy(*FGRgLNsr1}sVq+(orsv<-Gm}((OjAjYvU(CP)iy_h_{E9;5QD1ThczIz#J9Tyz8!FyePCO;uf$GNm`c F{{{bqt>^#% literal 0 HcmV?d00001 diff --git a/documentation/assets/nodes/btroot.png.import b/documentation/assets/nodes/btroot.png.import new file mode 100644 index 0000000..0d0ecaf --- /dev/null +++ b/documentation/assets/nodes/btroot.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bd4srq2ktcjbt" +path="res://.godot/imported/btroot.png-06d458b63a88908557ef569967b6d585.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://documentation/assets/nodes/btroot.png" +dest_files=["res://.godot/imported/btroot.png-06d458b63a88908557ef569967b6d585.ctex"] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/bptc_ldr=0 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/documentation/assets/nodes/btselector.png b/documentation/assets/nodes/btselector.png new file mode 100644 index 0000000000000000000000000000000000000000..fd8f820397ad605ecd8c5e6ebdab84a9aecc7901 GIT binary patch literal 9821 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 XrDjRK2+o3D0E3Z{P!O*W)ernX$+7EE literal 0 HcmV?d00001 diff --git a/examples/blackboard_sharing/README.MD b/examples/blackboard_sharing/README.MD new file mode 100644 index 0000000..fe0d594 --- /dev/null +++ b/examples/blackboard_sharing/README.MD @@ -0,0 +1,12 @@ +# 🗣️ Sharing blackboard : the talking game ! + +This example demonstrates how to share a single blackboard in multiple behavior trees. + +Sharing a blackboard can be necessary if you want to easily share data between trees, for example, to synchronize multiple NPCs. + +The blackboard can be instantiate in a Scene Tree via the editor, or in a script (as in this example). + +## Technical elements + +- `main.tscn` : scene to run. The main scene instantiates a unique blackboard and give it to all player trees, +- `player.tscn` : a player in the talking game. They all share the same blackboard to known who is the next to talk. \ No newline at end of file diff --git a/examples/blackboard_sharing/main.gd b/examples/blackboard_sharing/main.gd new file mode 100644 index 0000000..4ea5349 --- /dev/null +++ b/examples/blackboard_sharing/main.gd @@ -0,0 +1,42 @@ +extends Node2D + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +var _shared_blackboard:BTBlackboard + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _ready() -> void: + _shared_blackboard = BTBlackboard.new() + _shared_blackboard.set_data("next_talking", "Alice") + _shared_blackboard.set_data("players", []) + + $"PlayerAlice/BTRoot/".blackboard = _shared_blackboard + $"PlayerBob/BTRoot/".blackboard = _shared_blackboard + $"PlayerCharles/BTRoot/".blackboard = _shared_blackboard + $"PlayerEmily/BTRoot/".blackboard = _shared_blackboard + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + diff --git a/examples/blackboard_sharing/main.tscn b/examples/blackboard_sharing/main.tscn new file mode 100644 index 0000000..8317600 --- /dev/null +++ b/examples/blackboard_sharing/main.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=3 format=3 uid="uid://d1s5iyoblr4cm"] + +[ext_resource type="Script" path="res://examples/blackboard_sharing/main.gd" id="1_g7q7h"] +[ext_resource type="PackedScene" uid="uid://7k8r0e84lcr3" path="res://examples/blackboard_sharing/player.tscn" id="2_y55mt"] + +[node name="World" type="Node2D"] +script = ExtResource("1_g7q7h") + +[node name="PlayerAlice" parent="." instance=ExtResource("2_y55mt")] +position = Vector2(509, 181) +player_name = "Alice" + +[node name="PlayerBob" parent="." instance=ExtResource("2_y55mt")] +position = Vector2(515, 477) +player_name = "Bob" + +[node name="PlayerCharles" parent="." instance=ExtResource("2_y55mt")] +position = Vector2(309, 324) +player_name = "Charles" + +[node name="PlayerEmily" parent="." instance=ExtResource("2_y55mt")] +position = Vector2(733, 322) +player_name = "Emily" diff --git a/examples/blackboard_sharing/player.gd b/examples/blackboard_sharing/player.gd new file mode 100644 index 0000000..b65b39b --- /dev/null +++ b/examples/blackboard_sharing/player.gd @@ -0,0 +1,63 @@ +extends Node2D + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +@export var player_name:String = "": + set(value): + player_name = value + if _name_label: + _name_label.text = player_name + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +@onready var _text_label:Label = $GUI/Text +@onready var _name_label:Label = $GUI/Name + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _ready() -> void: + _name_label.text = player_name + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func declare_presence(blackboard:BTBlackboard) -> int: + blackboard.get_data("players").append(player_name) + return BTTickResult.SUCCESS + +func is_my_turn_to_talk(next_talking:String) -> bool: + return player_name == next_talking + +func talk() -> int: + _text_label.visible = true + get_tree().create_timer(1).timeout.connect(func():_text_label.visible = false) + return BTTickResult.SUCCESS + +func choose_next_player_talking(blackboard:BTBlackboard) -> int: + blackboard.set_data("next_talking", _pick_next_player(blackboard.get_data("players"))) + return BTTickResult.SUCCESS + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func _pick_next_player(players:Array) -> String: + var result:String = players.pick_random() + while result == player_name: + result = players.pick_random() + return result diff --git a/examples/blackboard_sharing/player.tscn b/examples/blackboard_sharing/player.tscn new file mode 100644 index 0000000..6b53ca3 --- /dev/null +++ b/examples/blackboard_sharing/player.tscn @@ -0,0 +1,123 @@ +[gd_scene load_steps=11 format=3 uid="uid://7k8r0e84lcr3"] + +[ext_resource type="Script" path="res://examples/blackboard_sharing/player.gd" id="1_1ti0g"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/BTRoot.gd" id="2_sdd0w"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Composite/BTSelector.gd" id="3_2v3m1"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Composite/BTSequence.gd" id="4_fjw5l"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Decorators/BTSuccess.gd" id="4_qnbqx"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionCallable.gd" id="5_8tfvp"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Decorators/BTLimiter.gd" id="5_d3jao"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionCallable.gd" id="6_i6lan"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionWait.gd" id="10_1e6f0"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Decorators/BTInverter.gd" id="11_fvy66"] + +[node name="Player" type="Node2D"] +script = ExtResource("1_1ti0g") + +[node name="Shape" type="Node2D" parent="."] + +[node name="Ahahahah" type="Polygon2D" parent="Shape"] +color = Color(0.188235, 0.490196, 0.505882, 1) +polygon = PackedVector2Array(-27, -55, 22, -55, 22, -25, 10, -18, 24, 17, -30, 17, -30, 17, -30, 17, -13, -18, -13, -18, -13, -18, -27, -26, -27, -26, -27, -26) + +[node name="GUI" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 +offset_left = -61.0 +offset_top = -84.0 +offset_right = 61.0 +offset_bottom = -58.0 + +[node name="Text" type="Label" parent="GUI"] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +text = "My turn !" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Name" type="Label" parent="GUI"] +layout_mode = 0 +offset_left = 24.0 +offset_top = 104.0 +offset_right = 98.0 +offset_bottom = 127.0 +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="BTRoot" type="Node" parent="."] +script = ExtResource("2_sdd0w") +actor_path = NodePath("..") + +[node name="Do" type="Node" parent="BTRoot"] +script = ExtResource("4_fjw5l") + +[node name="Init" type="Node" parent="BTRoot/Do"] +script = ExtResource("4_fjw5l") +save_progression = true + +[node name="Declare I am playing" type="Node" parent="BTRoot/Do/Init"] +script = ExtResource("4_qnbqx") + +[node name="Do once" type="Node" parent="BTRoot/Do/Init/Declare I am playing"] +script = ExtResource("5_d3jao") + +[node name="I\'m here !" type="Node" parent="BTRoot/Do/Init/Declare I am playing/Do once"] +script = ExtResource("6_i6lan") +method_owner_path = NodePath("../../../../../..") +method_name = "declare_presence" +method_arguments = Array[String](["blackboard"]) + +[node name="Invert" type="Node" parent="BTRoot/Do/Init"] +script = ExtResource("11_fvy66") + +[node name="Do once" type="Node" parent="BTRoot/Do/Init/Invert"] +script = ExtResource("5_d3jao") + +[node name="Wait 1s" type="Node" parent="BTRoot/Do/Init/Invert/Do once"] +script = ExtResource("10_1e6f0") + +[node name="One Between" type="Node" parent="BTRoot/Do"] +script = ExtResource("3_2v3m1") +save_progression = true + +[node name="I must talk" type="Node" parent="BTRoot/Do/One Between"] +script = ExtResource("4_fjw5l") +save_progression = true + +[node name="Is my Turn ?" type="Node" parent="BTRoot/Do/One Between/I must talk"] +script = ExtResource("5_8tfvp") +method_owner_path = NodePath("../../../../..") +method_name = "is_my_turn_to_talk" +method_arguments = Array[String](["blackboard.get_data(\"next_talking\")"]) + +[node name="Talk" type="Node" parent="BTRoot/Do/One Between/I must talk"] +script = ExtResource("6_i6lan") +method_owner_path = NodePath("../../../../..") +method_name = "talk" + +[node name="Wait a little bit" type="Node" parent="BTRoot/Do/One Between/I must talk"] +script = ExtResource("10_1e6f0") +random_deviation_ms = 300 + +[node name="Set Next Player To Talk" type="Node" parent="BTRoot/Do/One Between/I must talk"] +script = ExtResource("6_i6lan") +method_owner_path = NodePath("../../../../..") +method_name = "choose_next_player_talking" +method_arguments = Array[String](["blackboard"]) + +[node name="I must listen" type="Node" parent="BTRoot/Do/One Between"] +script = ExtResource("4_fjw5l") + +[node name="Not my turn" type="Node" parent="BTRoot/Do/One Between/I must listen"] +script = ExtResource("11_fvy66") + +[node name="Is my Turn ?" type="Node" parent="BTRoot/Do/One Between/I must listen/Not my turn"] +script = ExtResource("5_8tfvp") +method_owner_path = NodePath("../../../../../..") +method_name = "is_my_turn_to_talk" +method_arguments = Array[String](["blackboard.get_data(\"next_talking\")"]) diff --git a/examples/simple_ai_logic/README.MD b/examples/simple_ai_logic/README.MD new file mode 100644 index 0000000..5b56443 --- /dev/null +++ b/examples/simple_ai_logic/README.MD @@ -0,0 +1,12 @@ +# 🪵 Simple AI logic : the lumberjack ! + +This example is about a lumberjack that needs to cut logs. He can carry a certain quantity of logs before going back to the nearest warehouse to drop logs. When logs are dropped, he moves back to the tree he was cutting (or, the nearest tree if the tree is cut), and cut logs again. + +The aim of this example is to show how to implement a simple AI logic, composed of differents phases, using a behavior tree. This is just a proposal, there are several ways to create our lumberjack ! + +In lumberjack behavior tree, you can notice there is no custom tree node (action or condition) : only based ones are used. To execute functional actions, like dropping logs, the `BTActionCallable` is used. It allows to call a method in a node. For simple behavior trees, it allows to contain all logic into the same script. + +## Technical elements + +- `main.tscn` : scene to run, +- `lumberjack.tscn` : the lumberjack. The behavior tree is in this scene. \ No newline at end of file diff --git a/examples/simple_ai_logic/env/tree.gd b/examples/simple_ai_logic/env/tree.gd new file mode 100644 index 0000000..9a5ebcc --- /dev/null +++ b/examples/simple_ai_logic/env/tree.gd @@ -0,0 +1,49 @@ +extends Node2D + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +@export var max_log_count:int = 3 + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +@onready var remaining_logs:int = max_log_count + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _draw(): + var poly = $ShapeFull/Leaves.polygon + for i in range(1 , poly.size()): + draw_line(poly[i-1] , poly[i], Color.BLACK , 1) + draw_line(poly[poly.size() - 1] , poly[0], Color.BLACK , 1) + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func has_logs() -> bool: + return remaining_logs > 0 + +func cut_log() -> void: + if remaining_logs > 0: + remaining_logs -= 1 + if remaining_logs == 0: + queue_free() + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + diff --git a/examples/simple_ai_logic/env/tree.tscn b/examples/simple_ai_logic/env/tree.tscn new file mode 100644 index 0000000..b5c2f3c --- /dev/null +++ b/examples/simple_ai_logic/env/tree.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=5 format=3] + +[ext_resource type="Script" path="res://examples/simple_ai_logic/env/tree.gd" id="1_r2ta2"] + +[sub_resource type="Gradient" id="Gradient_aa3nm"] +colors = PackedColorArray(0.408848, 0.73338, 3.85046e-07, 1, 1, 1, 1, 1) + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_2o5uu"] +frequency = 0.025 + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_0hflj"] +color_ramp = SubResource("Gradient_aa3nm") +noise = SubResource("FastNoiseLite_2o5uu") + +[node name="Tree" type="Node2D" groups=["tree"]] +script = ExtResource("1_r2ta2") + +[node name="ShapeFull" type="Node2D" parent="."] + +[node name="Base" type="Polygon2D" parent="ShapeFull"] +color = Color(0.270588, 0.141176, 0, 1) +polygon = PackedVector2Array(-15, 7, -15, 7, 11, 7, 11, 7, 11, 7, 1, -6, 1, -6, 1, -6, 6, -38, -4, -38, -4, -38, -4, -38) + +[node name="Leaves" type="Polygon2D" parent="ShapeFull"] +color = Color(0.121569, 0.301961, 0.0470588, 1) +texture = SubResource("NoiseTexture2D_0hflj") +polygon = PackedVector2Array(-3, -22, -3, -22, -11, -26, -11, -26, -11, -26, -11, -26, -11, -26, -11, -26, -11, -26, -11, -26, -11, -26, -11, -26, -18, -32, -18, -32, -18, -32, -18, -32, -18, -32, -18, -32, -18, -32, -18, -32, -18, -32, -18, -32, -23, -39, -23, -39, -23, -39, -23, -39, -23, -39, -23, -39, -23, -39, -23, -39, -23, -39, -23, -39, -23, -47, -18, -60, -18, -60, -18, -60, -18, -60, -18, -60, -18, -60, -18, -60, -18, -60, -18, -60, -18, -60, -21, -76, -22, -86, -22, -86, -22, -86, -22, -86, -22, -86, -22, -86, -22, -86, -22, -86, -22, -86, -22, -86, -7, -95, -7, -95, -7, -95, -7, -95, -7, -95, -7, -95, -7, -95, -7, -95, -7, -95, -7, -95, 7, -95, 7, -95, 7, -95, 7, -95, 7, -95, 7, -95, 7, -95, 7, -95, 7, -95, 7, -95, 19, -91, 19, -91, 19, -91, 19, -91, 19, -91, 19, -91, 19, -91, 19, -91, 19, -91, 19, -91, 25, -84, 25, -84, 25, -84, 25, -84, 25, -84, 25, -84, 25, -84, 25, -84, 25, -84, 25, -84, 29, -69, 29, -69, 29, -69, 29, -69, 29, -69, 29, -69, 29, -69, 29, -69, 29, -69, 29, -69, 29, -57, 29, -57, 29, -57, 29, -57, 29, -57, 29, -57, 29, -57, 29, -57, 29, -57, 29, -57, 30, -49, 30, -49, 30, -49, 30, -49, 30, -49, 30, -49, 30, -49, 30, -49, 30, -49, 30, -49, 33, -43, 33, -43, 33, -43, 33, -43, 33, -43, 33, -43, 33, -43, 33, -43, 33, -43, 33, -43, 34, -36, 34, -36, 34, -36, 34, -36, 34, -36, 34, -36, 34, -36, 34, -36, 34, -36, 34, -36, 31, -31, 31, -31, 31, -31, 31, -31, 31, -31, 31, -31, 31, -31, 31, -31, 31, -31, 31, -31, 20, -25, 20, -25, 20, -25, 20, -25, 20, -25, 20, -25, 20, -25, 20, -25, 20, -25, 20, -25, 7, -21, 7, -21, 7, -21, 7, -21, 7, -21, 7, -21, 7, -21, 7, -21, 7, -21, 7, -21) diff --git a/examples/simple_ai_logic/env/warehouse.tscn b/examples/simple_ai_logic/env/warehouse.tscn new file mode 100644 index 0000000..1be61ba --- /dev/null +++ b/examples/simple_ai_logic/env/warehouse.tscn @@ -0,0 +1,9 @@ +[gd_scene format=3 uid="uid://i4372roabk7a"] + +[node name="Warehouse" type="Node2D" groups=["warehouse"]] + +[node name="Shape" type="Polygon2D" parent="."] +position = Vector2(0, 7) +scale = Vector2(0.28841, 0.28841) +color = Color(0.270588, 0.145098, 0.0117647, 1) +polygon = PackedVector2Array(-110.953, 0, 232.308, 0, 232.308, -225.374, 138.691, -298.187, -180.299, -218.439, -110.953, -218.439) diff --git a/examples/simple_ai_logic/lumberjack.gd b/examples/simple_ai_logic/lumberjack.gd new file mode 100644 index 0000000..a8bf751 --- /dev/null +++ b/examples/simple_ai_logic/lumberjack.gd @@ -0,0 +1,102 @@ +extends Node2D + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +@export_category("Logger") + +@export var max_log_capacity:int = 2 + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +var logs_count:int = 0 + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +@onready var _btroot:BTRoot = $AI + +var _cutting_log:bool = false +var _cutting_tree:Node2D + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +func on_state_entered() : + _btroot.on_running.connect(func(s):print(s)) + _btroot.on_idle.connect(func():print("idle...")) + _btroot.enabled = true + +func can_carry_more_logs() -> bool: + return logs_count < max_log_capacity + +func has_no_log() -> bool: + return logs_count == 0 + +func has_remaining_trees() -> bool: + return not get_tree().get_nodes_in_group("tree").is_empty() + +func get_nearest_tree() -> Node2D: + var nearest_tree:Node2D + var nearest_distance_to_tree:float = 99999.0 + for tree in get_tree().get_nodes_in_group("tree"): + var distance_to_tree:float = global_position.distance_to(tree.global_position) + if distance_to_tree < nearest_distance_to_tree: + nearest_distance_to_tree = distance_to_tree + nearest_tree = tree + return nearest_tree + +func get_nearest_warehouse() -> Node2D: + var nearest_warehouse:Node2D + var nearest_distance_to_warehouse:float = 99999.0 + for warehouse in get_tree().get_nodes_in_group("warehouse"): + var distance_to_warehouse:float = global_position.distance_to(warehouse.global_position) + if distance_to_warehouse < nearest_distance_to_warehouse: + nearest_distance_to_warehouse = distance_to_warehouse + nearest_warehouse = warehouse + return nearest_warehouse + +func tree_is_valid(tree:Node2D) -> bool: + return is_instance_valid(tree) and tree.has_logs() + +func cut_log(tree:Node2D) -> int: + if not _cutting_log: + _cutting_log = true + _cutting_tree = tree + get_tree().create_timer(1).timeout.connect(_on_log_cut, CONNECT_ONE_SHOT) + return BTTickResult.RUNNING if _cutting_log else BTTickResult.FAILURE + +func drop_logs_to_warehouse() -> void: + logs_count = 0 + +func move_to(delta:float, node:Node2D) -> int: + if global_position.distance_to(node.global_position) > 10: + global_position = global_position.move_toward(node.global_position, delta * 300) + return BTTickResult.RUNNING + else: + return BTTickResult.SUCCESS + + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + +func _on_log_cut() -> void: + if is_instance_valid(_cutting_tree): + _cutting_tree.cut_log() + _cutting_tree = null + logs_count += 1 + _cutting_log = false diff --git a/examples/simple_ai_logic/lumberjack.tscn b/examples/simple_ai_logic/lumberjack.tscn new file mode 100644 index 0000000..3a44330 --- /dev/null +++ b/examples/simple_ai_logic/lumberjack.tscn @@ -0,0 +1,167 @@ +[gd_scene load_steps=11 format=3 uid="uid://bl8kvanpmae2g"] + +[ext_resource type="Script" path="res://examples/simple_ai_logic/lumberjack.gd" id="1_4c8nf"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/BTRoot.gd" id="2_hoy6d"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Composite/BTSelector.gd" id="3_5vl0m"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Composite/BTSequence.gd" id="4_c83di"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Decorators/BTInverter.gd" id="5_iaq0m"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Leaves/BTConditionCallable.gd" id="6_wov0v"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardSet.gd" id="7_f8o6y"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionCallable.gd" id="8_mjt8i"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Decorators/BTFailure.gd" id="9_ojjv5"] +[ext_resource type="Script" path="res://addons/yet_another_behavior_tree/src/Nodes/Leaves/BTActionBlackboardDelete.gd" id="10_7bq5a"] + +[node name="LumberJack" type="Node2D"] +script = ExtResource("1_4c8nf") + +[node name="Shape" type="Node2D" parent="."] + +[node name="Polygon2D" type="Polygon2D" parent="Shape"] +color = Color(0.54902, 0.0862745, 0.117647, 1) +polygon = PackedVector2Array(-2, -5, -2, -2, -1, -2, -1, 0, -4, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, -5, 5, 4, 5, 1, 0, 1, -2, 2, -2, 2, -5) + +[node name="AI" type="Node" parent="."] +script = ExtResource("2_hoy6d") +actor_path = NodePath("..") + +[node name="One Between" type="Node" parent="AI"] +script = ExtResource("3_5vl0m") + +[node name="Idle To Warehouse" type="Node" parent="AI/One Between"] +script = ExtResource("4_c83di") + +[node name="No Remaining Tree" type="Node" parent="AI/One Between/Idle To Warehouse"] +script = ExtResource("5_iaq0m") + +[node name="At Least One Tree" type="Node" parent="AI/One Between/Idle To Warehouse/No Remaining Tree"] +script = ExtResource("6_wov0v") +method_owner_path = NodePath("../../../../..") +method_name = "has_remaining_trees" + +[node name="Has No Log" type="Node" parent="AI/One Between/Idle To Warehouse"] +script = ExtResource("6_wov0v") +method_owner_path = NodePath("../../../..") +method_name = "has_no_log" + +[node name="Move To Nearest Warehouse" type="Node" parent="AI/One Between/Idle To Warehouse"] +script = ExtResource("4_c83di") + +[node name="Get Nearest Warehouse" type="Node" parent="AI/One Between/Idle To Warehouse/Move To Nearest Warehouse"] +script = ExtResource("7_f8o6y") +blackboard_key = "nearest_warehouse" +expression = "actor.get_nearest_warehouse()" +can_overwrite_value = true + +[node name="Move To Warehouse" type="Node" parent="AI/One Between/Idle To Warehouse/Move To Nearest Warehouse"] +script = ExtResource("8_mjt8i") +method_owner_path = NodePath("../../../../..") +method_name = "move_to" +method_arguments = Array[String](["delta", "blackboard.get_data(\"nearest_warehouse\")"]) + +[node name="Put Logs To Warehouse" type="Node" parent="AI/One Between"] +script = ExtResource("4_c83di") + +[node name="One Between" type="Node" parent="AI/One Between/Put Logs To Warehouse"] +script = ExtResource("3_5vl0m") + +[node name="Can NOT Carry More Logs" type="Node" parent="AI/One Between/Put Logs To Warehouse/One Between"] +script = ExtResource("5_iaq0m") + +[node name="Can Cary More Logs" type="Node" parent="AI/One Between/Put Logs To Warehouse/One Between/Can NOT Carry More Logs"] +script = ExtResource("6_wov0v") +method_owner_path = NodePath("../../../../../..") +method_name = "can_carry_more_logs" + +[node name="No Remaining Tree" type="Node" parent="AI/One Between/Put Logs To Warehouse/One Between"] +script = ExtResource("5_iaq0m") + +[node name="At Least One Tree" type="Node" parent="AI/One Between/Put Logs To Warehouse/One Between/No Remaining Tree"] +script = ExtResource("6_wov0v") +method_owner_path = NodePath("../../../../../..") +method_name = "has_remaining_trees" + +[node name="Move To Nearest Warehouse" type="Node" parent="AI/One Between/Put Logs To Warehouse"] +script = ExtResource("4_c83di") + +[node name="Get Nearest Warehouse" type="Node" parent="AI/One Between/Put Logs To Warehouse/Move To Nearest Warehouse"] +script = ExtResource("7_f8o6y") +blackboard_key = "nearest_warehouse" +expression = "actor.get_nearest_warehouse()" +can_overwrite_value = true + +[node name="Move To Warehouse" type="Node" parent="AI/One Between/Put Logs To Warehouse/Move To Nearest Warehouse"] +script = ExtResource("8_mjt8i") +method_owner_path = NodePath("../../../../..") +method_name = "move_to" +method_arguments = Array[String](["delta", "blackboard.get_data(\"nearest_warehouse\")"]) + +[node name="Drop Logs" type="Node" parent="AI/One Between/Put Logs To Warehouse"] +script = ExtResource("8_mjt8i") +method_owner_path = NodePath("../../../..") +method_name = "drop_logs_to_warehouse" + +[node name="Get Log" type="Node" parent="AI/One Between"] +script = ExtResource("4_c83di") + +[node name="Can Carry More Logs" type="Node" parent="AI/One Between/Get Log"] +script = ExtResource("6_wov0v") +method_owner_path = NodePath("../../../..") +method_name = "can_carry_more_logs" + +[node name="Move To Nearest Tree" type="Node" parent="AI/One Between/Get Log"] +script = ExtResource("4_c83di") + +[node name="Has Remaning Trees" type="Node" parent="AI/One Between/Get Log/Move To Nearest Tree"] +script = ExtResource("6_wov0v") +method_owner_path = NodePath("../../../../..") +method_name = "has_remaining_trees" + +[node name="Get Nearest Tree" type="Node" parent="AI/One Between/Get Log/Move To Nearest Tree"] +script = ExtResource("7_f8o6y") +blackboard_key = "nearest_tree" +expression = "actor.get_nearest_tree()" + +[node name="Stop If Nearest Tree If Invalid" type="Node" parent="AI/One Between/Get Log"] +script = ExtResource("4_c83di") + +[node name="OR" type="Node" parent="AI/One Between/Get Log/Stop If Nearest Tree If Invalid"] +script = ExtResource("3_5vl0m") + +[node name="Tree Is Valid" type="Node" parent="AI/One Between/Get Log/Stop If Nearest Tree If Invalid/OR"] +script = ExtResource("6_wov0v") +method_owner_path = NodePath("../../../../../..") +method_name = "tree_is_valid" +method_arguments = Array[String](["blackboard.get_data(\"nearest_tree\")"]) + +[node name="Stop Because Tree Invalid" type="Node" parent="AI/One Between/Get Log/Stop If Nearest Tree If Invalid/OR"] +script = ExtResource("9_ojjv5") + +[node name="Delete Nearest Tree Ref" type="Node" parent="AI/One Between/Get Log/Stop If Nearest Tree If Invalid/OR/Stop Because Tree Invalid"] +script = ExtResource("10_7bq5a") +blackboard_key = "nearest_tree" + +[node name="Move To Tree" type="Node" parent="AI/One Between/Get Log"] +script = ExtResource("8_mjt8i") +method_owner_path = NodePath("../../../..") +method_name = "move_to" +method_arguments = Array[String](["delta", "blackboard.get_data(\"nearest_tree\")"]) + +[node name="Cut Tree" type="Node" parent="AI/One Between/Get Log"] +script = ExtResource("4_c83di") + +[node name="Nearest Tree Is Valid" type="Node" parent="AI/One Between/Get Log/Cut Tree"] +script = ExtResource("6_wov0v") +method_owner_path = NodePath("../../../../..") +method_name = "tree_is_valid" +method_arguments = Array[String](["blackboard.get_data(\"nearest_tree\")"]) + +[node name="Can Carry More Logs" type="Node" parent="AI/One Between/Get Log/Cut Tree"] +script = ExtResource("6_wov0v") +method_owner_path = NodePath("../../../../..") +method_name = "can_carry_more_logs" + +[node name="Cut Log From Tree" type="Node" parent="AI/One Between/Get Log/Cut Tree"] +script = ExtResource("8_mjt8i") +method_owner_path = NodePath("../../../../..") +method_name = "cut_log" +method_arguments = Array[String](["blackboard.get_data(\"nearest_tree\")"]) diff --git a/examples/simple_ai_logic/main.gd b/examples/simple_ai_logic/main.gd new file mode 100644 index 0000000..905a50a --- /dev/null +++ b/examples/simple_ai_logic/main.gd @@ -0,0 +1,36 @@ +extends Node2D + +#------------------------------------------ +# Signaux +#------------------------------------------ + +#------------------------------------------ +# Exports +#------------------------------------------ + +#------------------------------------------ +# Variables publiques +#------------------------------------------ + +#------------------------------------------ +# Variables privées +#------------------------------------------ + +#------------------------------------------ +# Fonctions Godot redéfinies +#------------------------------------------ + +func _process(_delta:float) -> void: + if Input.is_action_just_released("ui_accept"): + var new_tree:Node2D = preload("res://examples/simple_ai_logic/env/tree.tscn").instantiate() + new_tree.global_position = get_global_mouse_position() + $Trees.add_child(new_tree) + +#------------------------------------------ +# Fonctions publiques +#------------------------------------------ + +#------------------------------------------ +# Fonctions privées +#------------------------------------------ + diff --git a/examples/simple_ai_logic/main.tscn b/examples/simple_ai_logic/main.tscn new file mode 100644 index 0000000..bf2ee68 --- /dev/null +++ b/examples/simple_ai_logic/main.tscn @@ -0,0 +1,104 @@ +[gd_scene load_steps=8 format=3 uid="uid://ccttcdvcigdoe"] + +[ext_resource type="Script" path="res://examples/simple_ai_logic/main.gd" id="1_23dkn"] +[ext_resource type="PackedScene" uid="uid://i4372roabk7a" path="res://examples/simple_ai_logic/env/warehouse.tscn" id="2_hh1py"] +[ext_resource type="PackedScene" path="res://examples/simple_ai_logic/env/tree.tscn" id="3_qyub5"] +[ext_resource type="PackedScene" uid="uid://bl8kvanpmae2g" path="res://examples/simple_ai_logic/lumberjack.tscn" id="4_782kh"] + +[sub_resource type="Gradient" id="Gradient_rssdc"] +colors = PackedColorArray(0.787759, 0.787759, 0.787759, 1, 1, 1, 1, 1) + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_ql20u"] +noise_type = 2 +frequency = 0.005 + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_181qe"] +width = 2050 +height = 2050 +color_ramp = SubResource("Gradient_rssdc") +noise = SubResource("FastNoiseLite_ql20u") + +[node name="World" type="Node2D"] +script = ExtResource("1_23dkn") + +[node name="Background" type="Polygon2D" parent="."] +color = Color(0.466667, 0.670588, 0, 1) +texture = SubResource("NoiseTexture2D_181qe") +polygon = PackedVector2Array(-7, -7, -7, -7, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, -7, 651, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1160, 655, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7, 1159, -7) + +[node name="Warehouses" type="Node2D" parent="."] + +[node name="Warehouse1" parent="Warehouses" instance=ExtResource("2_hh1py")] +position = Vector2(805, 229) + +[node name="Warehouse2" parent="Warehouses" instance=ExtResource("2_hh1py")] +position = Vector2(268, 556) + +[node name="Trees" type="Node2D" parent="."] +y_sort_enabled = true + +[node name="Tree" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(132, 126) + +[node name="Tree2" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(46, 69) + +[node name="Tree3" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(186, 110) + +[node name="Tree4" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(78, 126) + +[node name="Tree5" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(140, 185) + +[node name="Tree6" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(83, 215) + +[node name="Tree7" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(581, 604) + +[node name="Tree8" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(465, 473) + +[node name="Tree9" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(503, 523) + +[node name="Tree10" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(541, 495) + +[node name="Tree11" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(1044, 124) + +[node name="Tree12" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(1074, 235) + +[node name="Tree13" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(976, 178) + +[node name="Tree14" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(1035, 188) + +[node name="Tree15" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(1091, 155) + +[node name="Tree16" parent="Trees" instance=ExtResource("3_qyub5")] +position = Vector2(998, 101) + +[node name="GUI" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="ControlDesc" type="Label" parent="GUI"] +layout_mode = 0 +offset_left = 23.0 +offset_top = 605.0 +offset_right = 371.0 +offset_bottom = 631.0 +text = "SPACE : plant a tree at mouse location" + +[node name="LumberJack" parent="." instance=ExtResource("4_782kh")] +position = Vector2(685, 300) +scale = Vector2(3.5, 3.5) diff --git a/project.godot b/project.godot index 08cfe7d..6f2f76c 100644 --- a/project.godot +++ b/project.godot @@ -20,7 +20,7 @@ config/windows_native_icon="res://icon.ico" [editor_plugins] -enabled=PackedStringArray("res://addons/simple-state/plugin.cfg", "res://addons/simplelicense/plugin.cfg") +enabled=PackedStringArray("res://addons/simplelicense/plugin.cfg", "res://addons/fontawesome/plugin.cfg", "res://addons/SpritesheetGenerator/plugin.cfg", "res://addons/yet_another_behavior_tree/plugin.cfg") [input] diff --git a/script_templates/.gdignore b/script_templates/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/script_templates/BTNode/default.gd b/script_templates/BTNode/default.gd new file mode 100644 index 0000000..880773c --- /dev/null +++ b/script_templates/BTNode/default.gd @@ -0,0 +1,4 @@ +extends _BASE_ + +func tick(actor:Node2D, blackboard:BTBlackboard) -> int: + return BTTickResult.SUCCESS