resized textures, first draft of moving. TODO: Use cubecoordinates EVERYWHERE. Find out a way to check if moving would break a hive

This commit is contained in:
Sch1nken 2024-03-06 04:00:54 +01:00
parent aa4343309c
commit b9df0b4361
68 changed files with 1509 additions and 17 deletions

View file

@ -1,4 +1,5 @@
extends Node3D
class_name HexGrid
@onready var placement_visualizer = $PlacementVisualizer
@ -17,8 +18,22 @@ const size: float = 0.5
var used_cells: Dictionary = {}
@export var layer_height: float = 0.4
# have all used_cells be saved as Vector4i (q, r, s, y)
class CellStorage:
var cells: Dictionary = {}
func add_cell(coords: CubeCoordinates, layer: int = 0) -> void:
pass
func remove_cell(coords: CubeCoordinates, layer: int = 0) -> void:
pass
func has_cell(cords: CubeCoordinates, layer: int = 0) -> bool:
return false
class CubeCoordinates:
var q: float
@ -103,6 +118,12 @@ func get_3d_pos(position2D: Vector2):
var placements: Dictionary = {}
func is_cell_empty(coords: Vector2i) -> bool:
return !used_cells.has(coords)
func get_empty_neighbours(coords: Vector2i) -> Array[Vector2i]:
return get_neighbours(coords).filter(is_cell_empty)
func get_neighbours(coords: Vector2i) -> Array[Vector2i]:
return [
Vector2i(coords.x + 1, coords.y), Vector2i(coords.x + 1, coords.y - 1), Vector2i(coords.x, coords.y - 1),
@ -209,6 +230,7 @@ func _on_insect_placed(resource: TileResource, is_black: bool, pos: Vector2i) ->
tile_copy.position = Vector3(hex_pos.x, 20.0, hex_pos.y)
tile_copy.resource = resource
tile_copy.is_black = is_black
tile_copy.coordinates = pos
var target_pos = Vector3(hex_pos.x, 0.0, hex_pos.y)
used_cells[Vector2i(pos.x, pos.y)] = tile_copy
@ -218,11 +240,53 @@ func _on_insect_placed(resource: TileResource, is_black: bool, pos: Vector2i) ->
var tween = get_tree().create_tween()
tween.tween_property(tile_copy, "position", target_pos, 1.0).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_EXPO)
func _on_insect_tile_selected(tile: InsectTile) -> void:
if tile.resource.movement_behaviour == null:
return
var pos = world_to_hex_tile(Vector2(tile.position.x, tile.position.z))
var spaces = tile.resource.movement_behaviour.get_available_spaces(Vector2i(pos.q, pos.r), self)
for space in spaces:
var outline = HEX_OUTLINE.instantiate()
var hex_pos = flat_hex_to_world_position(AxialCoordinates.new(space.x, space.y))
outline.position = Vector3(hex_pos.x, 0.0, hex_pos.y)
outline.hex_pos = space
outline.visible = true
outline.insect_tile = tile
outline.is_moving = true
outline.insect_resource = tile.resource
outline.is_black = tile.is_black
placement_visualizer.add_child(outline)
placements[space] = outline
func _on_insect_tile_moved(tile: InsectTile, target: Vector2i) -> void:
used_cells.erase(tile.coordinates)
var new_hex_pos = flat_hex_to_world_position(AxialCoordinates.new(target.x, target.y))
var sky_new_hex_pos = Vector3(new_hex_pos.x, 20.0, new_hex_pos.y)
var ground_new_hex_pos = Vector3(new_hex_pos.x, 0.0, new_hex_pos.y)
#
var current_hex_pos = tile.position
var sky_current_hex_pos = tile.position + Vector3(0.0, 20.0, 0.0)
#
var tween = get_tree().create_tween()
tween.tween_property(tile, "position", sky_current_hex_pos, 0.5).set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_EXPO)
tween.tween_property(tile, "position", sky_new_hex_pos, 0.0)
tween.tween_property(tile, "position", ground_new_hex_pos, 1.0).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_EXPO)
tile.coordinates = target
used_cells[target] = tile
func _ready() -> void:
GameEvents.insect_selected.connect(_on_insect_selected)
GameEvents.insect_placement_cancelled.connect(_on_insect_placement_cancelled)
GameEvents.insect_placed.connect(_on_insect_placed)
GameEvents.insect_tile_selected.connect(_on_insect_tile_selected)
GameEvents.insect_tile_moved.connect(_on_insect_tile_moved)
return
for x in range(-6, 5):