diff --git a/project/objects/primitive_nodes/point_primitive_node.tscn b/project/objects/primitive_nodes/point_primitive_node.tscn index 1219b926..1425e4ea 100644 --- a/project/objects/primitive_nodes/point_primitive_node.tscn +++ b/project/objects/primitive_nodes/point_primitive_node.tscn @@ -3,6 +3,20 @@ [ext_resource type="PackedScene" uid="uid://bwrqsnetcn8yr" path="res://assets/models/point_handle.blend" id="1_njtj3"] [ext_resource type="Material" uid="uid://b4ip0oq8o76mc" path="res://assets/materials/peak_handle_depth_tested.tres" id="2_mx0s0"] +[sub_resource type="GDScript" id="GDScript_am0ml"] +resource_name = "PointPrimitiveHandles" +script/source = "extends PointPrimitiveNode + +@onready var terrain : TerrainMeshEditor = get_parent() + +func _ready(): + terrain.selection_changed.connect(_selection_changed) + visible = false + +func _selection_changed(primitive : TerrainPrimitive): + visible = primitive == self.get_primitive() +" + [sub_resource type="GDScript" id="GDScript_njtj3"] resource_name = "HeightHandle" script/source = "extends Area3D @@ -136,6 +150,7 @@ height = 10000.0 [node name="PointPrimitiveNode" type="PointPrimitiveNode" unique_id=1472259146] transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 0, 0) +script = SubResource("GDScript_am0ml") [node name="point_handle" parent="." unique_id=1807952123 instance=ExtResource("1_njtj3")] transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0) diff --git a/project/scenes/editor.tscn b/project/scenes/editor.tscn index e04f7172..a08f3646 100644 --- a/project/scenes/editor.tscn +++ b/project/scenes/editor.tscn @@ -8,43 +8,13 @@ [ext_resource type="Texture2D" uid="uid://bl3gn6qruuy8w" path="res://assets/icons/plane.svg" id="4_xg7d5"] [ext_resource type="Texture2D" uid="uid://d1te42w7wpkrx" path="res://assets/icons/noise.svg" id="5_eqbpn"] [ext_resource type="PackedScene" uid="uid://bsvvhue5x4rb" path="res://ui/primitive_inspectors/point_primitive_inspector.tscn" id="8_5tm2q"] +[ext_resource type="PackedScene" uid="uid://c5desl3kt72c7" path="res://ui/primitive_inspectors/noise_primitive_inspector.tscn" id="9_3vi5u"] [ext_resource type="PackedScene" uid="uid://bl16us512blpp" path="res://ui/primitive_inspectors/base_primitive_inspector.tscn" id="9_j8y2p"] - -[sub_resource type="PointPrimitive" id="PointPrimitive_5tm2q"] - -[sub_resource type="FastNoiseLite" id="FastNoiseLite_pxqd5"] -frequency = 0.015 -fractal_octaves = 3 - -[sub_resource type="NoisePrimitive" id="NoisePrimitive_ba0ut"] -blend_range = 5.0 -noise = SubResource("FastNoiseLite_pxqd5") -noise_amplitude = 20.0 - -[sub_resource type="FastNoiseLite" id="FastNoiseLite_b1cmn"] -noise_type = 0 -frequency = 0.03 -fractal_type = 2 -metadata/_preview_in_3d_space_ = true - -[sub_resource type="NoisePrimitive" id="NoisePrimitive_pxqd5"] -blend_range = 10.0 -noise = SubResource("FastNoiseLite_b1cmn") -noise_amplitude = 5.0 - -[sub_resource type="FastNoiseLite" id="FastNoiseLite_ba0ut"] -noise_type = 4 -frequency = 0.588 -fractal_gain = 1.0 -fractal_weighted_strength = 1.0 - -[sub_resource type="NoisePrimitive" id="NoisePrimitive_q68jb"] -blend_mode = 1 -noise = SubResource("FastNoiseLite_ba0ut") +[ext_resource type="PackedScene" uid="uid://cq25h75v1bnn1" path="res://ui/primitive_inspectors/plane_primitive_inspector.tscn" id="9_o435n"] [sub_resource type="PlanePrimitive" id="PlanePrimitive_ba0ut"] -blend_range = 20.0 -baseline = -1.0 +blend_range = 1.0 +baseline = 0.0 [sub_resource type="Gradient" id="Gradient_b1cmn"] interpolation_mode = 2 @@ -128,12 +98,17 @@ load_path = "res://.godot/imported/point.svg-e68fd7c1e788d2c48d769cc58eba6e98.ct [sub_resource type="PlanePrimitive" id="PlanePrimitive_5lcyj"] +[sub_resource type="FastNoiseLite" id="FastNoiseLite_3vi5u"] +frequency = 0.0326 +fractal_octaves = 3 + [sub_resource type="NoisePrimitive" id="NoisePrimitive_5lcyj"] +noise = SubResource("FastNoiseLite_3vi5u") [node name="Editor" type="Node3D" unique_id=1027707839] [node name="TerrainMeshEditor" type="TerrainMeshEditor" parent="." unique_id=1382595562] -primitives = [SubResource("PointPrimitive_5tm2q"), SubResource("NoisePrimitive_ba0ut"), SubResource("NoisePrimitive_pxqd5"), SubResource("NoisePrimitive_q68jb"), SubResource("PlanePrimitive_ba0ut")] +primitives = [SubResource("PlanePrimitive_ba0ut")] vertex_color_gradient = SubResource("Gradient_b1cmn") color_gradient_end_height = 100.0 chunk_count = 8 @@ -232,8 +207,8 @@ layout_mode = 2 size_flags_vertical = 3 inspectors = { &"ExpressionPrimitive": ExtResource("9_j8y2p"), -&"NoisePrimitive": ExtResource("9_j8y2p"), -&"PlanePrimitive": ExtResource("9_j8y2p"), +&"NoisePrimitive": ExtResource("9_3vi5u"), +&"PlanePrimitive": ExtResource("9_o435n"), &"PointPrimitive": ExtResource("8_5tm2q") } terrain = NodePath("../../../TerrainMeshEditor") diff --git a/project/ui/editor_elements/float_editor.tscn b/project/ui/editor_elements/float_editor.tscn index 0720fe49..c7f9eb84 100644 --- a/project/ui/editor_elements/float_editor.tscn +++ b/project/ui/editor_elements/float_editor.tscn @@ -11,16 +11,10 @@ var value_before : float = 0.0 var dragging := false func connect_changes(): - $HSlider.connect(\"drag_ended\", _drag_ended) - $HSlider.connect(\"drag_started\", _drag_started) - $HSlider.connect(\"value_changed\", _slider_value_changed) - $SpinBox.connect(\"value_changed\", _spin_value_changed) - -func disconnect_changes(): - $HSlider.disconnect(\"drag_ended\", _drag_ended) - $HSlider.disconnect(\"drag_started\", _drag_started) - $HSlider.disconnect(\"value_changed\", _slider_value_changed) - $SpinBox.disconnect(\"value_changed\", _spin_value_changed) + $HSlider.drag_ended.connect(_drag_ended) + $HSlider.drag_started.connect(_drag_started) + $HSlider.value_changed.connect(_slider_value_changed) + $SpinBox.value_changed.connect(_spin_value_changed) func _ready() -> void: primitive.changed.connect(_primitive_changed) @@ -56,11 +50,16 @@ offset_bottom = 31.0 script = SubResource("GDScript_aclmm") [node name="SpinBox" type="SpinBox" parent="." unique_id=580598896] +custom_minimum_size = Vector2(100, 0) layout_mode = 2 min_value = -10000.0 max_value = 100000.0 +step = 0.01 value = 10.0 allow_greater = true +alignment = 2 +custom_arrow_step = 1.0 +custom_arrow_round = true [node name="HSlider" type="HSlider" parent="." unique_id=163542019] layout_mode = 2 @@ -69,3 +68,4 @@ size_flags_vertical = 1 max_value = 300.0 step = 0.01 value = 200.0 +tick_count = 4 diff --git a/project/ui/primitive_inspectors/base_primitive_inspector.tscn b/project/ui/primitive_inspectors/base_primitive_inspector.tscn index bc51df25..036195fc 100644 --- a/project/ui/primitive_inspectors/base_primitive_inspector.tscn +++ b/project/ui/primitive_inspectors/base_primitive_inspector.tscn @@ -10,13 +10,19 @@ script/source = "extends OptionButton @onready var terrain : TerrainMeshEditor = $\"../../..\".terrain @onready var primitive : TerrainPrimitive = terrain.current_selected +func _ready(): + selected = primitive.blend_mode + primitive.changed.connect(_primitive_changed) + +func _primitive_changed(): + selected = primitive.blend_mode func _on_item_selected(index: int) -> void: var before : int = primitive.blend_mode EditHistory.push_action(primitive.set_blend_mode.bind(index), primitive.set_blend_mode.bind(before)) " -[node name="PointPrimitive" type="MarginContainer" unique_id=905749607] +[node name="Primitive" type="MarginContainer" unique_id=905749607] offset_right = 302.0 offset_bottom = 230.0 theme_override_constants/margin_left = 5 diff --git a/project/ui/primitive_inspectors/noise_primitive_inspector.tscn b/project/ui/primitive_inspectors/noise_primitive_inspector.tscn new file mode 100644 index 00000000..4c44f715 --- /dev/null +++ b/project/ui/primitive_inspectors/noise_primitive_inspector.tscn @@ -0,0 +1,47 @@ +[gd_scene format=3 uid="uid://c5desl3kt72c7"] + +[ext_resource type="PackedScene" uid="uid://bl16us512blpp" path="res://ui/primitive_inspectors/base_primitive_inspector.tscn" id="1_xrxbf"] +[ext_resource type="PackedScene" uid="uid://cwby0in0f2wi2" path="res://ui/editor_elements/float_editor.tscn" id="2_sg7mg"] + +[node name="NoisePrimitive" unique_id=905749607 instance=ExtResource("1_xrxbf")] + +[node name="Label" type="Label" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="0" unique_id=273381442] +layout_mode = 2 +text = "Noise Scale" + +[node name="FloatEditor" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="1" unique_id=1730998858 instance=ExtResource("2_sg7mg")] +layout_mode = 2 +changes_value = "noise_scale" + +[node name="SpinBox" parent="VBoxContainer/FloatEditor" index="0" unique_id=580598896] +min_value = 0.01 +suffix = "x" + +[node name="HSlider" parent="VBoxContainer/FloatEditor" index="1" unique_id=163542019] +min_value = 0.01 +max_value = 100.0 +value = 10.0 +exp_edit = true +tick_count = 3 + +[node name="Label2" type="Label" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="2" unique_id=1672112548] +layout_mode = 2 +text = "Noise Amplitude" + +[node name="FloatEditor2" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="3" unique_id=826068898 instance=ExtResource("2_sg7mg")] +layout_mode = 2 +changes_value = "noise_amplitude" + +[node name="SpinBox" parent="VBoxContainer/FloatEditor2" index="0" unique_id=580598896] +min_value = 0.01 +prefix = "±" +suffix = "m" + +[node name="HSlider" parent="VBoxContainer/FloatEditor2" index="1" unique_id=163542019] +min_value = 0.01 +exp_edit = true +tick_count = 3 + +[editable path="VBoxContainer/FloatEditor"] +[editable path="VBoxContainer/FloatEditor2"] +[editable path="VBoxContainer/FloatEditor3"] diff --git a/project/ui/primitive_inspectors/plane_primitive_inspector.tscn b/project/ui/primitive_inspectors/plane_primitive_inspector.tscn new file mode 100644 index 00000000..0583f2c6 --- /dev/null +++ b/project/ui/primitive_inspectors/plane_primitive_inspector.tscn @@ -0,0 +1,16 @@ +[gd_scene format=3 uid="uid://cq25h75v1bnn1"] + +[ext_resource type="PackedScene" uid="uid://bl16us512blpp" path="res://ui/primitive_inspectors/base_primitive_inspector.tscn" id="1_6yw1a"] +[ext_resource type="PackedScene" uid="uid://cwby0in0f2wi2" path="res://ui/editor_elements/float_editor.tscn" id="2_rbqm7"] + +[node name="PlanePrimitive" unique_id=905749607 instance=ExtResource("1_6yw1a")] + +[node name="Label" type="Label" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="0" unique_id=1175716242] +layout_mode = 2 +text = "Baseline" + +[node name="FloatEditor" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="1" unique_id=1730998858 instance=ExtResource("2_rbqm7")] +layout_mode = 2 +changes_value = "baseline" + +[editable path="VBoxContainer/FloatEditor3"] diff --git a/test-terrains/volcano.terrain.res b/test-terrains/volcano.terrain.res new file mode 100644 index 00000000..416622cf Binary files /dev/null and b/test-terrains/volcano.terrain.res differ