fix: wrong edit history;feat: blendmode selector

This commit is contained in:
Sara Gerretsen 2025-12-14 14:16:52 +01:00
parent 18ecb79957
commit 0f8733ef3e
9 changed files with 251 additions and 33 deletions

54
assets/icons/delete.svg Normal file
View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="16.933332mm"
height="16.933332mm"
viewBox="0 0 16.933332 16.933332"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="delete.svg"
inkscape:export-filename="../../project/assets/icons/delete.svg"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:showpageshadow="2"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="5.1187826"
inkscape:cx="30.280638"
inkscape:cy="16.80087"
inkscape:current-layer="layer1" />
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
d="m 4.4006052,4.8168325 c -0.2167261,0 -0.3909619,0.1742357 -0.3909619,0.3909618 V 15.568873 c 0,0.216726 0.1742358,0.390963 0.3909619,0.390963 h 8.1321208 c 0.216726,0 0.390962,-0.174237 0.390962,-0.390963 V 5.2077943 c 0,-0.2167261 -0.174236,-0.3909618 -0.390962,-0.3909618 z M 6.0127134,6.5791597 H 6.696517 c 0.1925686,0 0.3473831,0.1548145 0.3473831,0.3473831 v 7.2178792 c 0,0.19257 -0.1548145,0.347384 -0.3473831,0.347384 H 6.0127134 c -0.1925686,0 -0.3473831,-0.154814 -0.3473831,-0.347384 V 6.9265428 c 0,-0.1925686 0.1548145,-0.3473831 0.3473831,-0.3473831 z m 2.0959471,0 h 0.6838036 c 0.1925686,0 0.3473831,0.1548145 0.3473831,0.3473831 v 7.2178792 c 0,0.19257 -0.1548145,0.347384 -0.3473831,0.347384 H 8.1086605 c -0.1925688,0 -0.3473831,-0.154814 -0.3473831,-0.347384 V 6.9265428 c 0,-0.1925686 0.1548143,-0.3473831 0.3473831,-0.3473831 z m 1.9376715,0 h 0.683119 c 0.192568,0 0.347382,0.1548145 0.347382,0.3473831 v 7.2178792 c 0,0.19257 -0.154814,0.347384 -0.347382,0.347384 h -0.683119 c -0.1925684,0 -0.3480681,-0.154814 -0.3480681,-0.347384 V 6.9265428 c 0,-0.1925686 0.1554997,-0.3473831 0.3480681,-0.3473831 z"
style="fill:#969696;stroke-width:4.99999;stroke-linecap:round;paint-order:fill markers stroke"
id="path4"
sodipodi:nodetypes="ssssssssssssssssssssssssssssssssssss" />
<rect
style="fill:#969696;fill-opacity:1;stroke:none;stroke-width:4.99999;stroke-linecap:round;paint-order:fill markers stroke"
id="rect2"
width="2.7221162"
height="10.311472"
x="1.8568949"
y="-13.622402"
ry="0.34995934"
transform="rotate(90)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="16.933332mm"
height="16.933332mm"
viewBox="0 0 16.933332 16.933332"
version="1.1"
id="svg1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<g
id="layer1">
<path
d="m 4.4006052,4.8168325 c -0.2167261,0 -0.3909619,0.1742357 -0.3909619,0.3909618 V 15.568873 c 0,0.216726 0.1742358,0.390963 0.3909619,0.390963 h 8.1321208 c 0.216726,0 0.390962,-0.174237 0.390962,-0.390963 V 5.2077943 c 0,-0.2167261 -0.174236,-0.3909618 -0.390962,-0.3909618 z M 6.0127134,6.5791597 H 6.696517 c 0.1925686,0 0.3473831,0.1548145 0.3473831,0.3473831 v 7.2178792 c 0,0.19257 -0.1548145,0.347384 -0.3473831,0.347384 H 6.0127134 c -0.1925686,0 -0.3473831,-0.154814 -0.3473831,-0.347384 V 6.9265428 c 0,-0.1925686 0.1548145,-0.3473831 0.3473831,-0.3473831 z m 2.0959471,0 h 0.6838036 c 0.1925686,0 0.3473831,0.1548145 0.3473831,0.3473831 v 7.2178792 c 0,0.19257 -0.1548145,0.347384 -0.3473831,0.347384 H 8.1086605 c -0.1925688,0 -0.3473831,-0.154814 -0.3473831,-0.347384 V 6.9265428 c 0,-0.1925686 0.1548143,-0.3473831 0.3473831,-0.3473831 z m 1.9376715,0 h 0.683119 c 0.192568,0 0.347382,0.1548145 0.347382,0.3473831 v 7.2178792 c 0,0.19257 -0.154814,0.347384 -0.347382,0.347384 h -0.683119 c -0.1925684,0 -0.3480681,-0.154814 -0.3480681,-0.347384 V 6.9265428 c 0,-0.1925686 0.1554997,-0.3473831 0.3480681,-0.3473831 z"
style="fill:#969696;stroke-width:4.99999;stroke-linecap:round;paint-order:fill markers stroke"
id="path4" />
<rect
style="fill:#969696;fill-opacity:1;stroke:none;stroke-width:4.99999;stroke-linecap:round;paint-order:fill markers stroke"
id="rect2"
width="2.7221162"
height="10.311472"
x="1.8568949"
y="-13.622402"
ry="0.34995934"
transform="rotate(90)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bt72qid068u8u"
path="res://.godot/imported/delete.svg-e643415b9eb11db5bc3eead7997989c4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/icons/delete.svg"
dest_files=["res://.godot/imported/delete.svg-e643415b9eb11db5bc3eead7997989c4.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View file

@ -4,6 +4,7 @@
[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_njtj3"]
resource_name = "HeightHandle"
script/source = "extends Area3D
var dragged : bool = false
@ -43,6 +44,7 @@ height = 9.59302
radius = 5.78125
[sub_resource type="GDScript" id="GDScript_s814u"]
resource_name = "SlopeHandle"
script/source = "extends Area3D
var dragged : bool = false
@ -85,6 +87,7 @@ func _input_event(_camera: Camera3D, event: InputEvent, _event_position: Vector3
"
[sub_resource type="GDScript" id="GDScript_mx0s0"]
resource_name = "PositionHandle"
script/source = "extends Area3D
var dragged : bool = false

View file

@ -8,6 +8,7 @@
[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://bl16us512blpp" path="res://ui/primitive_inspectors/base_primitive_inspector.tscn" id="9_j8y2p"]
[sub_resource type="PointPrimitive" id="PointPrimitive_5tm2q"]
@ -75,6 +76,7 @@ volumetric_fog_sky_affect = 0.904
volumetric_fog_temporal_reprojection_amount = 0.99
[sub_resource type="GDScript" id="GDScript_b1cmn"]
resource_name = "EditorCamera"
script/source = "extends Camera3D
var pan_speed = .001
@ -157,7 +159,7 @@ script = SubResource("GDScript_b1cmn")
[node name="LeftPanel" type="Panel" parent="." unique_id=1768834661]
anchors_preset = 9
anchor_bottom = 1.0
offset_right = 258.0
offset_right = 326.0
grow_vertical = 2
theme = ExtResource("3_ba0ut")
@ -229,6 +231,9 @@ icons = {
layout_mode = 2
size_flags_vertical = 3
inspectors = {
&"ExpressionPrimitive": ExtResource("9_j8y2p"),
&"NoisePrimitive": ExtResource("9_j8y2p"),
&"PlanePrimitive": ExtResource("9_j8y2p"),
&"PointPrimitive": ExtResource("8_5tm2q")
}
terrain = NodePath("../../../TerrainMeshEditor")

View file

@ -1,37 +1,51 @@
[gd_scene format=3 uid="uid://cwby0in0f2wi2"]
[sub_resource type="GDScript" id="GDScript_aclmm"]
resource_name = "FloatEditor"
script/source = "extends HBoxContainer
@export var changes_value : String = \"height\"
@onready var terrain : TerrainMeshEditor = $\"../../..\".terrain
@onready var primitive : TerrainPrimitive = terrain.current_selected
var value_before : float = 0.0
var dragging := false
func _ready() -> void:
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)
func _ready() -> void:
primitive.changed.connect(_primitive_changed)
connect_changes()
_primitive_changed();
func _primitive_changed():
var value = primitive.get(changes_value)
$HSlider.value = value
$SpinBox.value = value
$HSlider.set_value_no_signal(value)
$SpinBox.set_value_no_signal(value)
func _spin_value_changed(value : float):
EditHistory.push_action(primitive.set.bind(changes_value, $SpinBox.value), primitive.set.bind(changes_value, primitive.get(changes_value)))
var old : float = primitive.get(changes_value)
var new : float = $SpinBox.value
EditHistory.push_action(primitive.set.bind(changes_value, new), primitive.set.bind(changes_value, old))
func _drag_started():
dragging = true
value_before = primitive.get(changes_value)
func _slider_value_changed(value : float):
primitive.set(changes_value, value)
$SpinBox.value = value
func _drag_ended(changed : bool):
dragging = false
if changed:
EditHistory.push_action(primitive.set.bind(changes_value, $HSlider.value), primitive.set.bind(changes_value, value_before))
"

View file

@ -0,0 +1,76 @@
[gd_scene format=3 uid="uid://bl16us512blpp"]
[ext_resource type="PackedScene" uid="uid://cwby0in0f2wi2" path="res://ui/editor_elements/float_editor.tscn" id="1_dildi"]
[ext_resource type="Texture2D" uid="uid://bt72qid068u8u" path="res://assets/icons/delete.svg" id="1_h3glg"]
[sub_resource type="GDScript" id="GDScript_h3glg"]
resource_name = "BlendModeSelector"
script/source = "extends OptionButton
@onready var terrain : TerrainMeshEditor = $\"../../..\".terrain
@onready var primitive : TerrainPrimitive = terrain.current_selected
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]
offset_right = 302.0
offset_bottom = 230.0
theme_override_constants/margin_left = 5
theme_override_constants/margin_top = 5
theme_override_constants/margin_right = 5
theme_override_constants/margin_bottom = 5
metadata/_tab_index = 0
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=236606520]
layout_mode = 2
[node name="BlendRange" type="Label" parent="VBoxContainer" unique_id=455258354]
layout_mode = 2
size_flags_horizontal = 3
text = "Blend Range"
[node name="FloatEditor3" parent="VBoxContainer" unique_id=1730998858 instance=ExtResource("1_dildi")]
layout_mode = 2
changes_value = "blend_range"
[node name="SpinBox" parent="VBoxContainer/FloatEditor3" index="0" unique_id=580598896]
min_value = 0.0
max_value = 1000.0
[node name="HSlider" parent="VBoxContainer/FloatEditor3" index="1" unique_id=163542019]
max_value = 100.0
value = 100.0
exp_edit = true
tick_count = 11
ticks_on_borders = true
[node name="BlendModeSelector" type="OptionButton" parent="VBoxContainer" unique_id=1342650865]
layout_mode = 2
selected = 0
item_count = 3
popup/item_0/text = "Peaks"
popup/item_0/id = 0
popup/item_1/text = "Valleys"
popup/item_1/id = 1
popup/item_2/text = "Both"
popup/item_2/id = 2
script = SubResource("GDScript_h3glg")
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer" unique_id=274380821]
layout_mode = 2
alignment = 2
[node name="Button" type="Button" parent="VBoxContainer/HBoxContainer" unique_id=1514690251]
custom_minimum_size = Vector2(32, 32)
layout_mode = 2
icon = ExtResource("1_h3glg")
icon_alignment = 1
expand_icon = true
[connection signal="item_selected" from="VBoxContainer/BlendModeSelector" to="VBoxContainer/BlendModeSelector" method="_on_item_selected"]
[editable path="VBoxContainer/FloatEditor3"]

View file

@ -1,8 +1,10 @@
[gd_scene format=3 uid="uid://bsvvhue5x4rb"]
[ext_resource type="PackedScene" uid="uid://cwby0in0f2wi2" path="res://ui/editor_elements/float_editor.tscn" id="1_qb00w"]
[ext_resource type="PackedScene" uid="uid://bl16us512blpp" path="res://ui/primitive_inspectors/base_primitive_inspector.tscn" id="1_tqa7h"]
[sub_resource type="GDScript" id="GDScript_qb00w"]
[sub_resource type="GDScript" id="GDScript_qfu2v"]
resource_name = "PositionEditor"
script/source = "extends HBoxContainer
@onready var terrain : TerrainMeshEditor = $\"../../..\".terrain
@ -15,8 +17,8 @@ func _ready():
func _primitive_changed():
var new_position : Vector2 = primitive.center
$XBox.value = new_position.x
$YBox.value = new_position.y
$XBox.set_value_no_signal(new_position.x)
$YBox.set_value_no_signal(new_position.y)
func _x_changed(value : float):
var old : Vector2 = primitive.center
@ -27,64 +29,55 @@ func _y_changed(value : float):
EditHistory.push_action(primitive.set.bind(\"center\", Vector2(old.x, value)), primitive.set.bind(\"center\", old))
"
[node name="PointPrimitive" type="MarginContainer" unique_id=905749607]
offset_right = 302.0
offset_bottom = 230.0
theme_override_constants/margin_left = 5
theme_override_constants/margin_top = 5
theme_override_constants/margin_right = 5
theme_override_constants/margin_bottom = 5
metadata/_tab_index = 0
[node name="PointPrimitive" unique_id=905749607 instance=ExtResource("1_tqa7h")]
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=236606520]
layout_mode = 2
[node name="HeightLabel" type="Label" parent="VBoxContainer" unique_id=1478707845]
[node name="HeightLabel" type="Label" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="0" unique_id=1675918554]
layout_mode = 2
size_flags_horizontal = 3
text = "Height"
[node name="FloatEditor" parent="VBoxContainer" unique_id=1730998858 instance=ExtResource("1_qb00w")]
[node name="FloatEditor" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="1" unique_id=1730998858 instance=ExtResource("1_qb00w")]
layout_mode = 2
[node name="Slope" type="Label" parent="VBoxContainer" unique_id=303736827]
[node name="Slope" type="Label" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="2" unique_id=1362885374]
layout_mode = 2
size_flags_horizontal = 3
text = "Slope"
[node name="FloatEditor2" parent="VBoxContainer" unique_id=1151227800 instance=ExtResource("1_qb00w")]
[node name="FloatEditor2" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="3" unique_id=739098632 instance=ExtResource("1_qb00w")]
layout_mode = 2
changes_value = "slope"
[node name="HSlider" parent="VBoxContainer/FloatEditor2" index="0" unique_id=163542019]
[node name="SpinBox" parent="VBoxContainer/FloatEditor2" index="0" unique_id=580598896]
step = 0.1
[node name="HSlider" parent="VBoxContainer/FloatEditor2" index="1" unique_id=163542019]
min_value = -2.0
max_value = 2.0
value = -0.5
tick_count = 5
ticks_on_borders = true
[node name="SpinBox" parent="VBoxContainer/FloatEditor2" index="1" unique_id=580598896]
step = 0.1
[node name="Position" type="Label" parent="VBoxContainer" unique_id=200995882]
[node name="Position" type="Label" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="4" unique_id=527506771]
layout_mode = 2
size_flags_horizontal = 3
text = "Position"
[node name="HSplitContainer" type="HBoxContainer" parent="VBoxContainer" unique_id=1958091184]
[node name="HSplitContainer" type="HBoxContainer" parent="VBoxContainer" parent_id_path=PackedInt32Array(236606520) index="5" unique_id=2016506236]
layout_mode = 2
script = SubResource("GDScript_qb00w")
script = SubResource("GDScript_qfu2v")
[node name="XBox" type="SpinBox" parent="VBoxContainer/HSplitContainer" unique_id=2044129298]
[node name="XBox" type="SpinBox" parent="VBoxContainer/HSplitContainer" index="0" unique_id=1149105773]
layout_mode = 2
min_value = -10000.0
max_value = 10000.0
prefix = "x"
[node name="YBox" type="SpinBox" parent="VBoxContainer/HSplitContainer" unique_id=1865142111]
[node name="YBox" type="SpinBox" parent="VBoxContainer/HSplitContainer" index="1" unique_id=1897326873]
layout_mode = 2
min_value = -10000.0
max_value = 10000.0
prefix = "y"
[editable path="VBoxContainer/FloatEditor2"]
[editable path="VBoxContainer/FloatEditor3"]

Binary file not shown.