Started to work on world scene: Added tile generation with button, started to tweak the visuals
This commit is contained in:
parent
ca3f2aba83
commit
8758a3ddfc
6 changed files with 150 additions and 1 deletions
|
|
@ -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:
|
||||
|
|
|
|||
39
Scenes/Map/Map.tscn
Normal file
39
Scenes/Map/Map.tscn
Normal file
|
|
@ -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"]
|
||||
78
Scenes/Map/map.gd
Normal file
78
Scenes/Map/map.gd
Normal file
|
|
@ -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")
|
||||
|
||||
1
Scenes/Map/map.gd.uid
Normal file
1
Scenes/Map/map.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://cesw3a37hqn08
|
||||
29
Scenes/Map/map_tile.tscn
Normal file
29
Scenes/Map/map_tile.tscn
Normal file
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue