feat: implemented live refresh
This commit is contained in:
parent
bab106eeea
commit
7ed438bcb2
|
|
@ -7,6 +7,7 @@
|
||||||
void PointPrimitiveNode::_bind_methods() {
|
void PointPrimitiveNode::_bind_methods() {
|
||||||
BIND_GET_SET(primitive);
|
BIND_GET_SET(primitive);
|
||||||
ClassDB::bind_method(D_METHOD("push_transform_changes"), &self_type::push_transform_changes);
|
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() {
|
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() {
|
void PointPrimitiveNode::push_transform_changes() {
|
||||||
if (this->primitive.is_valid()) {
|
if (this->primitive.is_valid()) {
|
||||||
this->pushing_change = true;
|
this->pushing_change = true;
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ protected:
|
||||||
void _notification(int what);
|
void _notification(int what);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void preview_transform_changes();
|
||||||
void push_transform_changes();
|
void push_transform_changes();
|
||||||
void set_primitive(Ref<PointPrimitive> primitive);
|
void set_primitive(Ref<PointPrimitive> primitive);
|
||||||
Ref<PointPrimitive> get_primitive() const;
|
Ref<PointPrimitive> get_primitive() const;
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,16 @@
|
||||||
script/source = "extends Area3D
|
script/source = "extends Area3D
|
||||||
|
|
||||||
var dragged : bool = false
|
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:
|
func _input(event: InputEvent) -> void:
|
||||||
if not dragged:
|
if not dragged:
|
||||||
|
|
@ -14,11 +24,11 @@ func _input(event: InputEvent) -> void:
|
||||||
if event is InputEventMouseButton and not (event as InputEventMouseButton).is_pressed():
|
if event is InputEventMouseButton and not (event as InputEventMouseButton).is_pressed():
|
||||||
dragged = false
|
dragged = false
|
||||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||||
$\"..\".push_transform_changes.call_deferred()
|
parent.push_transform_changes.call_deferred()
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
elif event is InputEventMouseMotion:
|
elif event is InputEventMouseMotion:
|
||||||
var motion := event as 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()
|
get_viewport().set_input_as_handled()
|
||||||
|
|
||||||
func _input_event(_camera: Camera3D, event: InputEvent, _event_position: Vector3, _normal: Vector3, _shape_idx: int) -> void:
|
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 dragged : bool = false
|
||||||
var slope_adjusted : float = 0.0
|
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:
|
func _input(event: InputEvent) -> void:
|
||||||
if not dragged:
|
if not dragged:
|
||||||
|
|
@ -66,6 +86,16 @@ func _input_event(_camera: Camera3D, event: InputEvent, _event_position: Vector3
|
||||||
script/source = "extends Area3D
|
script/source = "extends Area3D
|
||||||
|
|
||||||
var dragged : bool = false
|
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:
|
func _input(event: InputEvent) -> void:
|
||||||
if not dragged:
|
if not dragged:
|
||||||
|
|
@ -73,19 +103,20 @@ func _input(event: InputEvent) -> void:
|
||||||
if event is InputEventMouseButton and not (event as InputEventMouseButton).is_pressed():
|
if event is InputEventMouseButton and not (event as InputEventMouseButton).is_pressed():
|
||||||
dragged = false
|
dragged = false
|
||||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||||
$\"..\".push_transform_changes.call_deferred()
|
parent.push_transform_changes.call_deferred()
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
elif event is InputEventMouseMotion:
|
elif event is InputEventMouseMotion:
|
||||||
var motion := event as InputEventMouseMotion
|
var motion := event as InputEventMouseMotion
|
||||||
var cam_basis := get_viewport().get_camera_3d().global_basis
|
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 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()
|
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()
|
get_viewport().set_input_as_handled()
|
||||||
|
|
||||||
func _input_event(_camera: Camera3D, event: InputEvent, _event_position: Vector3, _normal: Vector3, _shape_idx: int) -> void:
|
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():
|
if not dragged and event is InputEventMouseButton and (event as InputEventMouseButton).is_pressed():
|
||||||
dragged = true
|
dragged = true
|
||||||
|
set_process_input(true)
|
||||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||||
get_viewport().set_input_as_handled()
|
get_viewport().set_input_as_handled()
|
||||||
"
|
"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue