50 lines
1.8 KiB
GDScript
50 lines
1.8 KiB
GDScript
extends ActionBehaviour
|
|
class_name ActionBehaviourMosquito
|
|
|
|
func do_action(source_tile: InsectTile, action_tile: InsectTile, map: HexGrid) -> void:
|
|
# if target only has move, just do move as
|
|
#source_tile.temporary_action_behaviour = action_tile.resource.action_behaviour
|
|
#source_tile.temporary_movement_behaviour = action_tile.resource.movement_behaviour
|
|
|
|
source_tile.temporary_resource = action_tile.resource
|
|
|
|
GameEvents.insect_tile_selected.emit(source_tile)
|
|
|
|
#if action_tile.resource.action_behaviour == null:
|
|
# map.do_move_as(source_tile, action_tile)
|
|
#else:
|
|
# Copy and offer MOVE and Action (basically pillbug)
|
|
# Starting to think it would be easier to temporarily change action_behaviour resource
|
|
|
|
|
|
# pass
|
|
|
|
# GameEvents.insect_tiles_selected_for_action
|
|
func get_targets(source_pos: Vector4i, map: HexGrid) -> Array[InsectTile]:
|
|
# if on the hive, i.e. layer > 0, we always move like a beetle
|
|
# so we can't use our action unless we're on layer 0
|
|
# TODO: Update movement selection
|
|
if source_pos.w > 0:
|
|
return []
|
|
|
|
var can_move: bool = map.can_hive_exist_without_tile(map.get_tile(source_pos))
|
|
|
|
var neighbours = map.get_neighbours(source_pos)
|
|
# Filter out other mosquitos
|
|
var possible_action_targets: Array[InsectTile] = []
|
|
for neighbour in neighbours:
|
|
var tile = map.get_tile(neighbour)
|
|
if tile != null:
|
|
# TODO: Find better way to see what tile we have...
|
|
if tile.resource.movement_behaviour is MovementBehaviourMosquito:
|
|
continue
|
|
|
|
if tile.resource.action_behaviour != null:
|
|
possible_action_targets.push_back(tile)
|
|
elif tile.resource.movement_behaviour.get_available_spaces(source_pos, map).size() > 0:
|
|
if can_move:
|
|
possible_action_targets.push_back(tile)
|
|
|
|
#GameEvents.insect_tiles_selected_for_action.emit(source_pos, possible_action_targets)
|
|
|
|
return possible_action_targets
|