feat: implemented live refresh
This commit is contained in:
parent
bab106eeea
commit
7ed438bcb2
|
|
@ -7,6 +7,7 @@
|
|||
void PointPrimitiveNode::_bind_methods() {
|
||||
BIND_GET_SET(primitive);
|
||||
ClassDB::bind_method(D_METHOD("push_transform_changes"), &self_type::push_transform_changes);
|
||||
ClassDB::bind_method(D_METHOD("preview_transform_changes"), &self_type::preview_transform_changes);
|
||||
}
|
||||
|
||||
void PointPrimitiveNode::on_underlying_changed() {
|
||||
|
|
@ -30,6 +31,22 @@ void PointPrimitiveNode::_notification(int what) {
|
|||
}
|
||||
}
|
||||
|
||||
void PointPrimitiveNode::preview_transform_changes() {
|
||||
if (this->primitive.is_valid()) {
|
||||
this->pushing_change = true;
|
||||
Vector3 const position{ get_global_position() };
|
||||
Vector2 const center{ position.x, position.z };
|
||||
if (center != this->primitive->get_center()) {
|
||||
this->primitive->set_center(center);
|
||||
}
|
||||
if (position.y != this->primitive->get_height()) {
|
||||
this->primitive->set_height(position.y);
|
||||
}
|
||||
|
||||
this->pushing_change = false;
|
||||
}
|
||||
}
|
||||
|
||||
void PointPrimitiveNode::push_transform_changes() {
|
||||
if (this->primitive.is_valid()) {
|
||||
this->pushing_change = true;
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ protected:
|
|||
void _notification(int what);
|
||||
|
||||
public:
|
||||
void preview_transform_changes();
|
||||
void push_transform_changes();
|
||||
void set_primitive(Ref<PointPrimitive> primitive);
|
||||
Ref<PointPrimitive> get_primitive() const;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,16 @@
|
|||
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:
|
||||
|
|
@ -14,11 +24,11 @@ func _input(event: InputEvent) -> void:
|
|||
if event is InputEventMouseButton and not (event as InputEventMouseButton).is_pressed():
|
||||
dragged = false
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
$\"..\".push_transform_changes.call_deferred()
|
||||
parent.push_transform_changes.call_deferred()
|
||||
get_viewport().set_input_as_handled()
|
||||
elif event is InputEventMouseMotion:
|
||||
var motion := event as InputEventMouseMotion
|
||||
get_parent_node_3d().global_position.y -= motion.screen_relative.y
|
||||
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:
|
||||
|
|
@ -37,6 +47,16 @@ script/source = "extends Area3D
|
|||
|
||||
var dragged : bool = false
|
||||
var slope_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:
|
||||
|
|
@ -66,6 +86,16 @@ func _input_event(_camera: Camera3D, event: InputEvent, _event_position: Vector3
|
|||
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:
|
||||
|
|
@ -73,19 +103,20 @@ func _input(event: InputEvent) -> void:
|
|||
if event is InputEventMouseButton and not (event as InputEventMouseButton).is_pressed():
|
||||
dragged = false
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
$\"..\".push_transform_changes.call_deferred()
|
||||
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()
|
||||
get_parent_node_3d().global_position += motion.screen_relative.y * z_axis + motion.screen_relative.x * x_axis
|
||||
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()
|
||||
"
|
||||
|
|
|
|||
Loading…
Reference in a new issue