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:
parent
aa4343309c
commit
b9df0b4361
68 changed files with 1509 additions and 17 deletions
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue