| Total Complexity | 5 | 
| Total Lines | 63 | 
| Duplicated Lines | 0 % | 
| Changes | 0 | ||
| 1 | """Tutorial 2 - how to use decisions  | 
            ||
| 2 | |||
| 3 | |||
| 4 | The behavior tree looks like:  | 
            ||
| 5 | --> sequence:  | 
            ||
| 6 | succes_threshold: 2  | 
            ||
| 7 | --(children)--> decision:  | 
            ||
| 8 | --(condition)--> is_name_set:  | 
            ||
| 9 | --(success_tree)--> say_hello:  | 
            ||
| 10 | --(failure_tree)--> sequence:  | 
            ||
| 11 | succes_threshold: 2  | 
            ||
| 12 | --(children)--> ask_for_name:  | 
            ||
| 13 | --(children)--> say_hello:  | 
            ||
| 14 | --(children)--> some_action:  | 
            ||
| 15 | |||
| 16 | """  | 
            ||
| 17 | |||
| 18 | import curio  | 
            ||
| 19 | import async_btree as bt  | 
            ||
| 20 | import contextvars  | 
            ||
| 21 | |||
| 22 | |||
| 23 | async def some_action():  | 
            ||
| 24 |     print("continue here...") | 
            ||
| 25 | return bt.SUCCESS  | 
            ||
| 26 | |||
| 27 | |||
| 28 | async def say_hello():  | 
            ||
| 29 |     print(f"Hello {name.get()}") | 
            ||
| 30 | return bt.SUCCESS  | 
            ||
| 31 | |||
| 32 | |||
| 33 | async def is_name_set():  | 
            ||
| 34 | return name.get() != ""  | 
            ||
| 35 | |||
| 36 | |||
| 37 | async def ask_for_name():  | 
            ||
| 38 |     new_name = input("Hello, whats your name? \n") | 
            ||
| 39 | if new_name != "":  | 
            ||
| 40 | name.set(new_name)  | 
            ||
| 41 | return bt.SUCCESS  | 
            ||
| 42 | else:  | 
            ||
| 43 | return bt.FAILURE  | 
            ||
| 44 | |||
| 45 | |||
| 46 | name = contextvars.ContextVar('name', default="") | 
            ||
| 47 | |||
| 48 | greet_with_name = bt.decision(  | 
            ||
| 49 | condition=is_name_set, success_tree=say_hello, failure_tree=bt.sequence([ask_for_name, say_hello])  | 
            ||
| 50 | )  | 
            ||
| 51 | |||
| 52 | b_tree = bt.sequence(children=[greet_with_name, some_action])  | 
            ||
| 53 | |||
| 54 | if __name__ == '__main__':  | 
            ||
| 55 | |||
| 56 |     name = contextvars.ContextVar('name', default="") | 
            ||
| 57 | |||
| 58 | curio.run(b_tree)  | 
            ||
| 59 | |||
| 60 | # You can take a look at the final behavior tree  | 
            ||
| 61 | abstract_tree_tree_1 = bt.analyze(b_tree)  | 
            ||
| 62 | print(bt.stringify_analyze(abstract_tree_tree_1))  | 
            ||
| 63 |