Prepared Movement behaviour. Fixed multi-tile placement bug

This commit is contained in:
Sch1nken 2024-03-29 02:51:06 +01:00
parent 62eef907d3
commit 397082f966
17 changed files with 395 additions and 75 deletions

View file

@ -1,11 +1,11 @@
extends Resource
class_name ActionBehaviour
func do_action() -> void:
func do_action(source_tile: InsectTile, action_tile: InsectTile, map: HexGrid) -> void:
pass
func select_targets(source_pos: Vector4i, map: HexGrid) -> void:
pass
func get_targets(source_pos: Vector4i, map: HexGrid) -> Array[InsectTile]:
return []
# NOTE: When selecting a tile, check if there is an action behaviour
# If yes: In addition to showing moveable spaces (0 for the mosquito by default)

View file

@ -1,8 +1,18 @@
extends ActionBehaviour
class_name ActionBehaviourMosquito
func do_action(source_tile: InsectTile, action_tile: InsectTile, map: HexGrid) -> void:
pass
# GameEvents.insect_tiles_selected_for_action
func select_targets(source_pos: Vector4i, map: HexGrid): # -> Array[InsectTile]:
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:
map.debug_label(Vector3(source_pos.x, source_pos.y, source_pos.z), "TODO: Implement Beetle Movement")
return []
var neighbours = map.get_neighbours(source_pos)
# Filter out other mosquitos
var possible_action_targets: Array[InsectTile] = []
@ -10,8 +20,9 @@ func select_targets(source_pos: Vector4i, map: HexGrid): # -> Array[InsectTile]:
var tile = map.get_tile(neighbour)
if tile != null:
# TODO: Find better way to see what tile we have...
pass
#if not tile.resource.movement_behaviour is MovementBehaviourMosquito:
# possible_action_targets.push_back(tile)
if not tile.resource.movement_behaviour is MovementBehaviourMosquito:
possible_action_targets.push_back(tile)
GameEvents.insect_tiles_selected_for_action.emit(source_pos, possible_action_targets)
#GameEvents.insect_tiles_selected_for_action.emit(source_pos, possible_action_targets)
return possible_action_targets

View file

@ -1,12 +1,24 @@
extends ActionBehaviour
class_name ActionBehaviourPillbug
func select_targets(source_pos: Vector4i, map: HexGrid): # -> Array[InsectTile]:
func do_action(source_tile: InsectTile, action_tile: InsectTile, map: HexGrid) -> void:
pass
func get_targets(source_pos: Vector4i, map: HexGrid) -> Array[InsectTile]:
var neighbours = map.get_neighbours(source_pos)
var possible_action_targets: Array[InsectTile] = []
for neighbour in neighbours:
var tile = map.get_tile(neighbour)
if tile != null:
possible_action_targets.push_back(tile)
if not tile.is_in_stack() and tile.can_move():
possible_action_targets.push_back(tile)
GameEvents.insect_tiles_selected_for_action.emit(source_pos, possible_action_targets)
#GameEvents.insect_tiles_selected_for_action.emit(source_pos, possible_action_targets)
return possible_action_targets
# 2nd level has to be clear (move through narrow gap rule)
# We could do the following: Get neighbours in 2nd level of source (pillbug) and target
# we we have two overlapping/same neighbours, we have a narrow gap and can't move the target