121 lines
3.3 KiB
GDScript
121 lines
3.3 KiB
GDScript
@tool
|
|
extends BeehaveTree
|
|
|
|
func _ready():
|
|
if Engine.is_editor_hint():
|
|
return
|
|
|
|
# Only setup for bots
|
|
if not get_parent().is_in_group("Bots"):
|
|
return
|
|
|
|
# Create root selector
|
|
var selector = SelectorComposite.new()
|
|
add_child(selector)
|
|
|
|
# Add sequences
|
|
selector.add_child(create_arrange_sequence())
|
|
selector.add_child(create_grab_sequence())
|
|
selector.add_child(create_put_sequence())
|
|
selector.add_child(create_move_sequence())
|
|
|
|
func create_arrange_sequence() -> SequenceComposite:
|
|
var sequence = SequenceComposite.new()
|
|
sequence.name = "ArrangeSequence"
|
|
|
|
# Has enough action points?
|
|
var check_ap = ConditionLeaf.new()
|
|
check_ap.name = "HasEnoughAP"
|
|
check_ap.set_script(preload("res://scripts/behaviors/conditions/has_ap.gd"))
|
|
|
|
# Can arrange items?
|
|
var can_arrange = ConditionLeaf.new()
|
|
can_arrange.name = "CanArrange"
|
|
can_arrange.set_script(preload("res://scripts/behaviors/conditions/can_arrange.gd"))
|
|
|
|
# Do arrange action
|
|
var do_arrange = ActionLeaf.new()
|
|
do_arrange.name = "DoArrange"
|
|
do_arrange.set_script(preload("res://scripts/behaviors/actions/do_arrange.gd"))
|
|
|
|
sequence.add_child(check_ap)
|
|
sequence.add_child(can_arrange)
|
|
sequence.add_child(do_arrange)
|
|
|
|
return sequence
|
|
|
|
func create_grab_sequence() -> SequenceComposite:
|
|
var sequence = SequenceComposite.new()
|
|
sequence.name = "GrabSequence"
|
|
|
|
# Has enough action points?
|
|
var check_ap = ConditionLeaf.new()
|
|
check_ap.name = "HasAP"
|
|
check_ap.set_script(preload("res://scripts/behaviors/conditions/has_ap.gd"))
|
|
|
|
# Can grab item?
|
|
var can_grab = ConditionLeaf.new()
|
|
can_grab.name = "CanGrab"
|
|
can_grab.set_script(preload("res://scripts/behaviors/conditions/can_grab.gd"))
|
|
|
|
# Do grab action
|
|
var do_grab = ActionLeaf.new()
|
|
do_grab.name = "DoGrab"
|
|
do_grab.set_script(preload("res://scripts/behaviors/actions/do_grab.gd"))
|
|
|
|
sequence.add_child(check_ap)
|
|
sequence.add_child(can_grab)
|
|
sequence.add_child(do_grab)
|
|
|
|
return sequence
|
|
|
|
func create_put_sequence() -> SequenceComposite:
|
|
var sequence = SequenceComposite.new()
|
|
sequence.name = "PutSequence"
|
|
|
|
# Has enough action points?
|
|
var check_ap = ConditionLeaf.new()
|
|
check_ap.name = "HasAP"
|
|
check_ap.set_script(preload("res://scripts/behaviors/conditions/has_ap.gd"))
|
|
|
|
# Can put item?
|
|
var can_put = ConditionLeaf.new()
|
|
can_put.name = "CanPut"
|
|
can_put.set_script(preload("res://scripts/behaviors/conditions/can_put.gd"))
|
|
|
|
# Do put action
|
|
var do_put = ActionLeaf.new()
|
|
do_put.name = "DoPut"
|
|
do_put.set_script(preload("res://scripts/behaviors/actions/do_put.gd"))
|
|
|
|
sequence.add_child(check_ap)
|
|
sequence.add_child(can_put)
|
|
sequence.add_child(do_put)
|
|
|
|
return sequence
|
|
|
|
func create_move_sequence() -> SequenceComposite:
|
|
var sequence = SequenceComposite.new()
|
|
sequence.name = "MoveSequence"
|
|
|
|
# Has enough action points?
|
|
var check_ap = ConditionLeaf.new()
|
|
check_ap.name = "HasAP"
|
|
check_ap.set_script(preload("res://scripts/behaviors/conditions/has_ap.gd"))
|
|
|
|
# Should move?
|
|
var should_move = ConditionLeaf.new()
|
|
should_move.name = "ShouldMove"
|
|
should_move.set_script(preload("res://scripts/behaviors/conditions/should_move.gd"))
|
|
|
|
# Do move action
|
|
var do_move = ActionLeaf.new()
|
|
do_move.name = "DoMove"
|
|
do_move.set_script(preload("res://scripts/behaviors/actions/do_move.gd"))
|
|
|
|
sequence.add_child(check_ap)
|
|
sequence.add_child(should_move)
|
|
sequence.add_child(do_move)
|
|
|
|
return sequence
|