Adds basic camp generation and placement

Adds basic camp generation and placement logic to the map generation process.

It attempts to place the camp in a valid location, avoiding paths and water bodies. It also sets the player's spawn point to the center of the generated camp, including some basic camp props like a tent, campfire, and bed.

Additionally, vegetation spawning is now dependent on the `should_spawn_*` methods of the `CellDataResource`, allowing more control over what spawns where.
This commit is contained in:
Dan Baker 2025-06-29 14:05:48 +01:00
parent 3959333534
commit a1efaf6294
8 changed files with 402 additions and 125 deletions

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=46 format=4 uid="uid://bwsugg4p50fjr"]
[gd_scene load_steps=53 format=4 uid="uid://bwsugg4p50fjr"]
[ext_resource type="Environment" uid="uid://cm77bbr0io118" path="res://Stages/Test3D/new_environment.tres" id="1_8ph61"]
[ext_resource type="Script" uid="uid://bwed2dwogfmxv" path="res://Entities/Player/scripts/player.gd" id="1_d602n"]
@ -6,6 +6,13 @@
[ext_resource type="Script" uid="uid://bbjv6a7yg7m02" path="res://Stages/Test3D/camera_pivot.gd" id="2_sdmks"]
[ext_resource type="Shader" uid="uid://bsemnmdracd4m" path="res://Common/shaders/outline.gdshader" id="4_feu7y"]
[ext_resource type="Script" uid="uid://bjco8musjqog4" path="res://Stages/Test3D/particles.gd" id="9_oiyue"]
[ext_resource type="PackedScene" uid="uid://cdbnr0jg2icaj" path="res://Entities/Tree/assets/temp/campfire_bricks.glb" id="13_qasnx"]
[ext_resource type="PackedScene" uid="uid://c4ovjmemnepdy" path="res://Entities/Tree/assets/temp/campfire_logs.glb" id="14_2xm50"]
[ext_resource type="PackedScene" uid="uid://e8wa72ulhegx" path="res://Entities/Tree/assets/temp/log.glb" id="15_e0hgm"]
[ext_resource type="PackedScene" uid="uid://by2v67khppn0j" path="res://Entities/Tree/assets/temp/bed_floor.glb" id="15_pbfwi"]
[ext_resource type="PackedScene" uid="uid://d3y1g22hjq7ch" path="res://Entities/Tree/assets/temp/statue_column.glb" id="16_ynokf"]
[ext_resource type="PackedScene" uid="uid://b0yuw5v7ytyd0" path="res://Entities/Tree/assets/temp/statue_columnDamaged.glb" id="17_pbfwi"]
[ext_resource type="PackedScene" uid="uid://c06cgs47ulyjs" path="res://Entities/Tree/assets/temp/stone_smallC.glb" id="19_ynokf"]
[ext_resource type="Texture2D" uid="uid://c78jcjh8fjndd" path="res://Stages/Test3D/assets/3d/particles/flamelet_smooth.png" id="21_xvexm"]
[ext_resource type="Script" uid="uid://dglvt140rhg00" path="res://Stages/Test3D/omni_light_3d.gd" id="22_ukp6m"]
[ext_resource type="PackedScene" uid="uid://mdxkaqaoybjv" path="res://Stages/Test3D/assets/tent-canvas.glb" id="23_5r2bu"]
@ -365,6 +372,42 @@ size = Vector2(2, 2)
[sub_resource type="BoxShape3D" id="BoxShape3D_tfa5t"]
size = Vector3(60, 0, 20)
[sub_resource type="Curve" id="Curve_5r2bu"]
_data = [Vector2(0.003125, 0.0237797), 0.0, 0.0, 0, 0, Vector2(0.21875, 0.877972), 0.0, 0.0, 0, 0, Vector2(0.41875, 0.194618), 0.0, 0.0, 0, 0, Vector2(0.478125, 0.576971), -7.27116, -7.27116, 0, 0, Vector2(0.621875, 0.227159), 0.0, 0.0, 0, 0, Vector2(0.7625, 0.365457), 0.0, 0.0, 0, 0, Vector2(1, 0.04005), 0.0, 0.0, 0, 0]
point_count = 7
[sub_resource type="CurveTexture" id="CurveTexture_23r73"]
curve = SubResource("Curve_5r2bu")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_p5fn2"]
emission_shape = 6
emission_ring_axis = Vector3(0, 1, 0)
emission_ring_height = 1.0
emission_ring_radius = 5.0
emission_ring_inner_radius = 0.0
emission_ring_cone_angle = 90.0
direction = Vector3(0.2, -1, 0)
spread = 5.0
initial_velocity_max = 10.0
scale_min = 0.1
alpha_curve = SubResource("CurveTexture_23r73")
collision_mode = 2
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_p5fn2"]
transparency = 1
cull_mode = 2
shading_mode = 0
vertex_color_use_as_albedo = true
albedo_color = Color(1, 1, 1, 0.807843)
albedo_texture = ExtResource("23_23r73")
use_particle_trails = true
[sub_resource type="RibbonTrailMesh" id="RibbonTrailMesh_5r2bu"]
material = SubResource("StandardMaterial3D_p5fn2")
size = 0.025
sections = 2
section_segments = 1
[sub_resource type="Curve" id="Curve_ukp6m"]
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.515625, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 3
@ -407,42 +450,6 @@ material = SubResource("StandardMaterial3D_hvb1l")
size = Vector2(0.2, 0.2)
orientation = 0
[sub_resource type="Curve" id="Curve_5r2bu"]
_data = [Vector2(0.003125, 0.0237797), 0.0, 0.0, 0, 0, Vector2(0.21875, 0.877972), 0.0, 0.0, 0, 0, Vector2(0.41875, 0.194618), 0.0, 0.0, 0, 0, Vector2(0.478125, 0.576971), -7.27116, -7.27116, 0, 0, Vector2(0.621875, 0.227159), 0.0, 0.0, 0, 0, Vector2(0.7625, 0.365457), 0.0, 0.0, 0, 0, Vector2(1, 0.04005), 0.0, 0.0, 0, 0]
point_count = 7
[sub_resource type="CurveTexture" id="CurveTexture_23r73"]
curve = SubResource("Curve_5r2bu")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_p5fn2"]
emission_shape = 6
emission_ring_axis = Vector3(0, 1, 0)
emission_ring_height = 1.0
emission_ring_radius = 5.0
emission_ring_inner_radius = 0.0
emission_ring_cone_angle = 90.0
direction = Vector3(0.2, -1, 0)
spread = 5.0
initial_velocity_max = 10.0
scale_min = 0.1
alpha_curve = SubResource("CurveTexture_23r73")
collision_mode = 2
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_p5fn2"]
transparency = 1
cull_mode = 2
shading_mode = 0
vertex_color_use_as_albedo = true
albedo_color = Color(1, 1, 1, 0.807843)
albedo_texture = ExtResource("23_23r73")
use_particle_trails = true
[sub_resource type="RibbonTrailMesh" id="RibbonTrailMesh_5r2bu"]
material = SubResource("StandardMaterial3D_p5fn2")
size = 0.025
sections = 2
section_segments = 1
[node name="Test3d" type="Node3D"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
@ -761,31 +768,50 @@ shape = SubResource("BoxShape3D_tfa5t")
[node name="VFX" type="Node3D" parent="SubViewportContainer/SubViewport"]
[node name="Fire" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/VFX"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.08083, 0.0837402, 0.501403)
visible = false
amount = 50
lifetime = 0.4
speed_scale = 0.4
process_material = SubResource("ParticleProcessMaterial_xvexm")
draw_pass_1 = SubResource("QuadMesh_hvb1l")
[node name="FloatingParticles" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/VFX"]
script = ExtResource("9_oiyue")
[node name="OmniLight3D" type="OmniLight3D" parent="SubViewportContainer/SubViewport/VFX/Fire"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.000509977, 0.121094, -0.00151992)
light_color = Color(0.89, 0.461613, 0.2136, 1)
light_energy = 0.590552
light_indirect_energy = 1.084
light_volumetric_fog_energy = 3.764
light_size = 0.105
shadow_enabled = true
distance_fade_enabled = true
distance_fade_begin = 386.01
distance_fade_shadow = 45.9
distance_fade_length = 28.05
script = ExtResource("22_ukp6m")
[node name="TileGround" type="Node3D" parent="SubViewportContainer/SubViewport"]
unique_name_in_owner = true
script = ExtResource("24_vyi1v")
ground_tile = ExtResource("25_caaui")
[node name="Rain" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/VFX"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0)
[node name="Camp" type="Node3D" parent="SubViewportContainer/SubViewport"]
unique_name_in_owner = true
[node name="Objects" type="Node3D" parent="SubViewportContainer/SubViewport/Camp"]
[node name="tent-canvas2" parent="SubViewportContainer/SubViewport/Camp/Objects" instance=ExtResource("23_5r2bu")]
transform = Transform3D(0.964438, 0, -0.264311, 0, 1, 0, 0.264311, 0, 0.964438, -1.40178, 0, -1.67128)
[node name="campfire_bricks2" parent="SubViewportContainer/SubViewport/Camp/Objects" instance=ExtResource("13_qasnx")]
transform = Transform3D(0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, -0.93138, 0.05, -0.326702)
[node name="campfire_logs2" parent="SubViewportContainer/SubViewport/Camp/Objects/campfire_bricks2" instance=ExtResource("14_2xm50")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0053246, 0, 0.0117908)
[node name="log2" parent="SubViewportContainer/SubViewport/Camp/Objects" instance=ExtResource("15_e0hgm")]
transform = Transform3D(0.440003, 0, 0.237482, 0, 0.5, 0, -0.237482, 0, 0.440003, -0.565749, 0.0532002, -0.598678)
[node name="statue_column2" parent="SubViewportContainer/SubViewport/Camp/Objects" instance=ExtResource("16_ynokf")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.654, 0, -2.707)
[node name="statue_column3" parent="SubViewportContainer/SubViewport/Camp/Objects" instance=ExtResource("16_ynokf")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.589154, 0, -2.703)
[node name="statue_column4" parent="SubViewportContainer/SubViewport/Camp/Objects" instance=ExtResource("16_ynokf")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.727, 0, 0.611)
[node name="statue_columnDamaged2" parent="SubViewportContainer/SubViewport/Camp/Objects" instance=ExtResource("17_pbfwi")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.609224, 0, 0.72)
[node name="bed_floor2" parent="SubViewportContainer/SubViewport/Camp/Objects" instance=ExtResource("15_pbfwi")]
transform = Transform3D(0.72094, 0, -0.346764, 0, 0.8, 0, 0.346764, 0, 0.72094, -1.54675, 0.0359214, -1.37165)
[node name="VFX" type="Node3D" parent="SubViewportContainer/SubViewport/Camp"]
[node name="Rain" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/Camp/VFX"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.545105, 10.1451, 0.937134)
visible = false
amount = 1000
preprocess = 10.0
@ -795,16 +821,27 @@ trail_lifetime = 0.1
process_material = SubResource("ParticleProcessMaterial_p5fn2")
draw_pass_1 = SubResource("RibbonTrailMesh_5r2bu")
[node name="FloatingParticles" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/VFX"]
script = ExtResource("9_oiyue")
[node name="Fire" type="GPUParticles3D" parent="SubViewportContainer/SubViewport/Camp/VFX"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.923367, 0.0346675, -0.309572)
amount = 50
lifetime = 0.4
speed_scale = 0.4
process_material = SubResource("ParticleProcessMaterial_xvexm")
draw_pass_1 = SubResource("QuadMesh_hvb1l")
[node name="TileGround" type="Node3D" parent="SubViewportContainer/SubViewport"]
unique_name_in_owner = true
script = ExtResource("24_vyi1v")
ground_tile = ExtResource("25_caaui")
[node name="tent-canvas2" parent="." instance=ExtResource("23_5r2bu")]
transform = Transform3D(0.964438, 0, -0.264311, 0, 1, 0, 0.264311, 0, 0.964438, 1.49756, 1.86265e-09, -3.10828)
[node name="OmniLight3D" type="OmniLight3D" parent="SubViewportContainer/SubViewport/Camp/VFX/Fire"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.000509977, 0.121094, -0.00151992)
light_color = Color(0.89, 0.461613, 0.2136, 1)
light_energy = 0.716329
light_indirect_energy = 1.084
light_volumetric_fog_energy = 3.764
light_size = 0.105
shadow_enabled = true
distance_fade_enabled = true
distance_fade_begin = 386.01
distance_fade_shadow = 45.9
distance_fade_length = 28.05
script = ExtResource("22_ukp6m")
[node name="UISubViewportContainer" type="SubViewportContainer" parent="."]
anchors_preset = 15
@ -852,3 +889,6 @@ fit_content = true
[node name="LoadedTreesLabel" type="RichTextLabel" parent="UISubViewportContainer/UISubViewport/UIContainer/PanelContainer/VBoxContainer"]
layout_mode = 2
fit_content = true
[node name="stone_smallC2" parent="." instance=ExtResource("19_ynokf")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.109824, 0.0499998, 1.05729)