Premier commit

This commit is contained in:
2026-09-01 22:41:37 +02:00
commit 7cff988739
133 changed files with 6412 additions and 0 deletions
+87
View File
@@ -0,0 +1,87 @@
@tool
extends Node3D
class_name HexMap
const BASE_TILE_SET_SCENE = preload('res://objects/map/tiles/base_hex_tile_set.tscn') as PackedScene
@export_tool_button("Load Map", "Callable") var load_map_action = load_map
@export var radius = 10
@onready var tile_set : HexTileSet = BASE_TILE_SET_SCENE.instantiate()
var empty_hex_tiles_coords : Array[Vector2i] = []
var hex_tiles_by_pos : Dictionary[String, HexTile] = {}
var hex_tiles_by_id : Dictionary[String, Array] = {}
func load_map():
for c in get_children():
c.queue_free()
empty_hex_tiles_coords = []
hex_tiles_by_pos = {}
empty_hex_tiles_coords = get_all_hex_coords()
empty_hex_tiles_coords.shuffle()
var mandatory_tiles = tile_set.get_all_hex_tiles().filter(
func (tile : HexTile): return tile.mandatory_tile
)
for hex_tile in mandatory_tiles:
for i in range(hex_tile.mandatory_count):
if len(empty_hex_tiles_coords) != 0:
spawn_tile(
empty_hex_tiles_coords.pop_front(),
hex_tile
)
while len(empty_hex_tiles_coords) != 0:
var coord : Vector2i = empty_hex_tiles_coords.pop_front()
spawn_tile(
coord,
get_available_tiles_for_coord(coord).pick_random()
)
func spawn_tile(coord : Vector2i, hex_tile : HexTile):
var new_tile = hex_tile.duplicate()
hex_tiles_by_pos["%d:%d" % [coord.x, coord.y]] = new_tile
if not (new_tile.name in hex_tiles_by_id):
hex_tiles_by_id[new_tile.name] = []
hex_tiles_by_id[new_tile.name].append(new_tile)
new_tile.position = get_world_tile_coord(coord)
new_tile.rotation.y = (randi() % 6)/6. * 2. * PI
add_child(new_tile)
func get_available_tiles_for_coord(_coord : Vector2) -> Array[HexTile]:
return tile_set.get_all_hex_tiles().filter(
func (tile : HexTile): return not tile.mandatory_tile
)
func get_all_hex_coords() -> Array[Vector2i]:
var coords : Array[Vector2i] = []
for x in range(-radius, radius):
for y in range(-radius, radius):
if Vector2(x,y).length() < radius:
coords.append(Vector2i(x,y))
return coords
func get_world_tile_coord(coord: Vector2i) -> Vector3:
return Vector3(
coord.x * HexTile.BASE_TILE_SIZE + (HexTile.BASE_TILE_SIZE/2. if coord.y%2 == 0 else 0.),
0.,
coord.y * HexTile.BASE_TILE_SIZE * cos(PI/6),
)
func get_all_tiles_with_id(id : String) -> Array[HexTile]:
if id in hex_tiles_by_id:
return (hex_tiles_by_id[id] as Array[HexTile])
return ([] as Array[HexTile])