diff --git a/Scenes/Global/game_data.gd b/Scenes/Global/game_data.gd index 9e29d95..9325515 100644 --- a/Scenes/Global/game_data.gd +++ b/Scenes/Global/game_data.gd @@ -43,9 +43,10 @@ func _on_shop_printer_purchase_req(printer_data: PrinterData) -> void: #region Job generation func _on_job_spawn_timer_timeout() -> void: + pass #print("Spawn timer over") #generate_job() - draw_job() + #draw_job() func generate_job() -> void: if not current_job_count >= max_jobs: diff --git a/Scenes/Map/Map.tscn b/Scenes/Map/Map.tscn new file mode 100644 index 0000000..aa069c3 --- /dev/null +++ b/Scenes/Map/Map.tscn @@ -0,0 +1,39 @@ +[gd_scene format=3 uid="uid://xpks7daol1db"] + +[ext_resource type="Script" uid="uid://cesw3a37hqn08" path="res://Scenes/Map/map.gd" id="1_iio4a"] +[ext_resource type="PackedScene" uid="uid://c6icyfxslhlmc" path="res://Scenes/Map/map_tile.tscn" id="2_lcs11"] + +[sub_resource type="Environment" id="Environment_7g6h4"] +ambient_light_source = 2 +ambient_light_color = Color(0.057391837, 0.057391845, 0.057391837, 1) +fog_enabled = true +fog_light_color = Color(0.7149284, 0.74206614, 0.7842839, 1) +fog_sky_affect = 0.0 + +[node name="Map" type="Node3D" unique_id=1765565476] +script = ExtResource("1_iio4a") +tile_scene = ExtResource("2_lcs11") + +[node name="Camera3D" type="Camera3D" parent="." unique_id=40432726] +transform = Transform3D(1, 0, 0, 0, 0.7071068, 0.7071068, 0, -0.7071068, 0.7071068, 0, 6, 5) + +[node name="MapTile" parent="." unique_id=441860049 instance=ExtResource("2_lcs11")] +visible = false + +[node name="Control" type="CanvasLayer" parent="." unique_id=1301244712] + +[node name="Button" type="Button" parent="Control" unique_id=1524228928] +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -73.5 +offset_top = 46.0 +offset_right = 72.5 +offset_bottom = 79.0 +grow_horizontal = 2 +text = "Generate new tile" + +[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1838982295] +environment = SubResource("Environment_7g6h4") + +[connection signal="pressed" from="Control/Button" to="." method="_on_button_pressed"] diff --git a/Scenes/Map/map.gd b/Scenes/Map/map.gd new file mode 100644 index 0000000..d6f1139 --- /dev/null +++ b/Scenes/Map/map.gd @@ -0,0 +1,78 @@ +extends Node3D + +@export var tile_scene: PackedScene +@export var tile_size: float = 2.0 +@export var tile_separation: float = 0.2 + +var generated_tiles: Dictionary = {} + +func _ready() -> void: + spawn_tile(Vector2i(0, 0)) + +func spawn_tile(grid_pos: Vector2i) -> void: + if generated_tiles.has(grid_pos): + return + + var tile = tile_scene.instantiate() + add_child(tile) + + var x_spacing = tile_size * 0.75 + tile_separation + var z_spacing = tile_size * sqrt(3) / 2 + tile_separation + + var pos_x = grid_pos.x * x_spacing + var pos_z = grid_pos.y * z_spacing + (abs(grid_pos.x) % 2) * (z_spacing / 2.0) + + var target_position = Vector3(pos_x, 0, pos_z) + + tile.transform.origin = Vector3(pos_x, -3.0, pos_z) + + generated_tiles[grid_pos] = tile + if tile.has_method("initialize"): + tile.initialize(grid_pos.x, grid_pos.y) + + var tween = create_tween() + var tile_light = tile.get_node_or_null("OmniLight3D") + if tile_light: + tile_light.light_energy = 0.0 + + tween.tween_property(tile, "position", target_position, 0.8)\ + .set_trans(Tween.TRANS_CUBIC)\ + .set_ease(Tween.EASE_OUT) + + if tile_light: + tween.parallel().tween_property(tile_light, "light_energy", 1.5, 0.8)\ + .set_trans(Tween.TRANS_CUBIC)\ + .set_ease(Tween.EASE_OUT) + +func get_hex_neighbors(grid_pos: Vector2i) -> Array[Vector2i]: + var neighbors: Array[Vector2i] = [] + + neighbors.append(grid_pos + Vector2i(0, -1)) # Neighbor Up + neighbors.append(grid_pos + Vector2i(0, 1)) # Neighbor Down + neighbors.append(grid_pos + Vector2i(-1, 0)) # Neighbor Left + neighbors.append(grid_pos + Vector2i(1, 0)) # Neighbor Right + + if abs(grid_pos.x) % 2 == 1: + neighbors.append(grid_pos + Vector2i(-1, 1)) # Neighbor Left-Down + neighbors.append(grid_pos + Vector2i(1, 1)) # Neighbor Right-Down + else: + neighbors.append(grid_pos + Vector2i(-1, -1)) # Neighbor Left-Up + neighbors.append(grid_pos + Vector2i(1, -1)) # Neighbor Right-Up + return neighbors + +func _on_button_pressed() -> void: + var open_neighbors = [] + + for current_pos in generated_tiles.keys(): + var neighbors = get_hex_neighbors(current_pos) + for n_pos in neighbors: + if not generated_tiles.has(n_pos) and not open_neighbors.has(n_pos): + open_neighbors.append(n_pos) + + if open_neighbors.size() > 0: + var random_target_pos = open_neighbors[randi() % open_neighbors.size()] + spawn_tile(random_target_pos) + print("Generated new tile at: ", random_target_pos) + else: + print("World is full") + diff --git a/Scenes/Map/map.gd.uid b/Scenes/Map/map.gd.uid new file mode 100644 index 0000000..6caac29 --- /dev/null +++ b/Scenes/Map/map.gd.uid @@ -0,0 +1 @@ +uid://cesw3a37hqn08 diff --git a/Scenes/Map/map_tile.tscn b/Scenes/Map/map_tile.tscn new file mode 100644 index 0000000..1f2edc2 --- /dev/null +++ b/Scenes/Map/map_tile.tscn @@ -0,0 +1,29 @@ +[gd_scene format=3 uid="uid://c6icyfxslhlmc"] + +[sub_resource type="CylinderMesh" id="CylinderMesh_7g6h4"] +top_radius = 1.0 +bottom_radius = 1.0 +height = 0.2 +radial_segments = 6 + +[sub_resource type="CylinderShape3D" id="CylinderShape3D_7g6h4"] +height = 0.22 +radius = 0.859375 + +[node name="MapTile" type="Node3D" unique_id=441860049] +transform = Transform3D(-4.3711385e-08, 0, -0.99999994, 0, 1, 0, 0.99999994, 0, -4.3711385e-08, 0, 0, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=786384927] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0) +mesh = SubResource("CylinderMesh_7g6h4") + +[node name="Area3D" type="Area3D" parent="MeshInstance3D" unique_id=519127025] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="MeshInstance3D/Area3D" unique_id=318914845] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0057469606, 0) +shape = SubResource("CylinderShape3D_7g6h4") +debug_color = Color(0, 0.6509804, 0.08627451, 0.52156866) + +[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=1228933535] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.2232149, 0) +light_energy = 1.5 diff --git a/project.godot b/project.godot index 6074cf9..0f6f939 100644 --- a/project.godot +++ b/project.godot @@ -28,3 +28,4 @@ GameData="*uid://d3abg1dpwrkmq" rendering_device/driver.windows="d3d12" renderer/rendering_method="mobile" +environment/defaults/default_clear_color=Color(0, 0, 0, 1)