terrain-editor/project/objects/primitive_nodes/point_primitive_node.tscn

184 lines
6.6 KiB
Plaintext

[gd_scene format=3 uid="uid://cnux2fqne284i"]
[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
var dragged : bool = false
var refresh_time : float
@onready
var parent := get_parent() as PointPrimitiveNode
func _process(delta):
if dragged and refresh_time < 0.0:
parent.preview_transform_changes.call_deferred()
refresh_time = 0.3
elif dragged:
refresh_time -= minf(delta, 0.05)
func _input(event: InputEvent) -> void:
if not dragged:
return
if event is InputEventMouseButton and not (event as InputEventMouseButton).is_pressed():
dragged = false
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
parent.push_transform_changes.call_deferred()
get_viewport().set_input_as_handled()
elif event is InputEventMouseMotion:
var motion := event as InputEventMouseMotion
parent.global_position.y -= motion.screen_relative.y
get_viewport().set_input_as_handled()
func _input_event(_camera: Camera3D, event: InputEvent, _event_position: Vector3, _normal: Vector3, _shape_idx: int) -> void:
if not dragged and event is InputEventMouseButton and (event as InputEventMouseButton).is_pressed():
get_viewport().set_input_as_handled()
dragged = true
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
"
[sub_resource type="CylinderShape3D" id="CylinderShape3D_mx0s0"]
height = 9.59302
radius = 5.78125
[sub_resource type="GDScript" id="GDScript_s814u"]
resource_name = "SlopeHandle"
script/source = "extends Area3D
var dragged : bool = false
var slope_adjusted : float = 0.0
var slope_pre_adjusted : float = 0.0
var refresh_time : float
@onready
var parent = get_parent() as PointPrimitiveNode
func _process(delta):
if dragged and refresh_time < 0.0:
parent.get_primitive().set_deferred(\"slope\", slope_adjusted)
refresh_time = 0.3
elif dragged:
refresh_time -= minf(delta, 0.05)
func _input(event: InputEvent) -> void:
if not dragged:
return
if event is InputEventMouseButton and not (event as InputEventMouseButton).is_pressed():
dragged = false
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
EditHistory.push_action(
parent.get_primitive().set.bind(\"slope\", slope_adjusted),
parent.get_primitive().set.bind(\"slope\", slope_pre_adjusted)
)
get_viewport().set_input_as_handled()
elif event is InputEventMouseMotion:
var motion := event as InputEventMouseMotion
slope_adjusted -= motion.screen_relative.y * 0.001
get_viewport().set_input_as_handled()
func _input_event(_camera: Camera3D, event: InputEvent, _event_position: Vector3, _normal: Vector3, _shape_idx: int) -> void:
if not dragged and event is InputEventMouseButton and (event as InputEventMouseButton).is_pressed():
get_viewport().set_input_as_handled()
dragged = true
slope_adjusted = parent.get_primitive().slope
slope_pre_adjusted = slope_adjusted
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
"
[sub_resource type="GDScript" id="GDScript_mx0s0"]
resource_name = "PositionHandle"
script/source = "extends Area3D
var dragged : bool = false
var refresh_time : float
@onready
var parent = get_parent() as PointPrimitiveNode
func _process(delta):
if dragged and refresh_time < 0.0:
parent.preview_transform_changes.call_deferred()
refresh_time = 0.3
elif dragged:
refresh_time -= minf(delta, 0.05)
func _input(event: InputEvent) -> void:
if not dragged:
return
if event is InputEventMouseButton and not (event as InputEventMouseButton).is_pressed():
dragged = false
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
parent.push_transform_changes.call_deferred()
get_viewport().set_input_as_handled()
elif event is InputEventMouseMotion:
var motion := event as InputEventMouseMotion
var cam_basis := get_viewport().get_camera_3d().global_basis
var x_axis := Vector3(cam_basis.x.x, 0, cam_basis.x.z).normalized()
var z_axis := Vector3(cam_basis.z.x, 0, cam_basis.z.z).normalized()
parent.global_position += motion.screen_relative.y * z_axis + motion.screen_relative.x * x_axis
get_viewport().set_input_as_handled()
func _input_event(_camera: Camera3D, event: InputEvent, _event_position: Vector3, _normal: Vector3, _shape_idx: int) -> void:
if not dragged and event is InputEventMouseButton and (event as InputEventMouseButton).is_pressed():
dragged = true
set_process_input(true)
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
get_viewport().set_input_as_handled()
"
[sub_resource type="SphereShape3D" id="SphereShape3D_njtj3"]
radius = 6.9789
[sub_resource type="CylinderMesh" id="CylinderMesh_njtj3"]
top_radius = 0.4
bottom_radius = 0.4
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)
[node name="HeightHandle" type="Area3D" parent="." unique_id=1397115657]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 27.8381, 0)
script = SubResource("GDScript_njtj3")
[node name="CollisionShape3D" type="CollisionShape3D" parent="HeightHandle" unique_id=1987632068]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.80421, 0)
shape = SubResource("CylinderShape3D_mx0s0")
[node name="SlopeAngle" type="Area3D" parent="." unique_id=31998186]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -34.0245, 0)
script = SubResource("GDScript_s814u")
[node name="CollisionShape3D" type="CollisionShape3D" parent="SlopeAngle" unique_id=1791452650]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.80421, 0)
shape = SubResource("CylinderShape3D_mx0s0")
[node name="PositionHandle" type="Area3D" parent="." unique_id=755854685]
script = SubResource("GDScript_mx0s0")
[node name="CollisionShape3D" type="CollisionShape3D" parent="PositionHandle" unique_id=25777228]
shape = SubResource("SphereShape3D_njtj3")
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=678201491]
material_override = ExtResource("2_mx0s0")
cast_shadow = 0
mesh = SubResource("CylinderMesh_njtj3")