22 lines
816 B
GDScript
22 lines
816 B
GDScript
class_name GrabCondition extends ConditionLeaf
|
|
|
|
func tick(actor: Node, blackboard: Blackboard) -> int:
|
|
if actor.action_points < 1 or actor.playerboard_is_full():
|
|
return FAILURE
|
|
|
|
# Check current position first
|
|
var current_cell = Vector3i(actor.current_position.x, 1, actor.current_position.y)
|
|
if actor.enhanced_gridmap.get_cell_item(current_cell) in actor.goals:
|
|
blackboard.set_value("grab_position", actor.current_position)
|
|
return SUCCESS
|
|
|
|
# Check adjacent cells
|
|
var neighbors = actor.enhanced_gridmap.get_neighbors(actor.current_position, 1)
|
|
for neighbor in neighbors:
|
|
var cell = Vector3i(neighbor.position.x, 1, neighbor.position.y)
|
|
if actor.enhanced_gridmap.get_cell_item(cell) in actor.goals:
|
|
blackboard.set_value("grab_position", neighbor.position)
|
|
return SUCCESS
|
|
|
|
return FAILURE
|