extends Control class_name SpaceNode # adapted from pc_tile code (project-elysium-main) var initial_pos: Vector2 var offset: Vector2 var draggable: bool = false var velocity: float = 0 # variables for velocity calculation var mouse_first_location: Vector2 var mouse_last_location: Vector2 var mouse_release_location: Vector2 var mouse_n_minus_one_location: Vector2 var time_since_first_location: float = -1 # Export variables, for ease of setting without going into the code @export var velocity_coeffecient: int = 500 @export var max_x: int = 1000 @export var min_x: int = 0 @export var ease_out_time: float = 0.5 @export var bounce: bool = false func _ready() -> void: draggable = true return func _process(delta: float) -> void: global_position.x += velocity if draggable: if (Input.is_action_just_pressed("click")): mouse_first_location = get_global_mouse_position() offset = get_local_mouse_position() - global_position if Input.is_action_pressed("click"): mouse_first_location = get_global_mouse_position() global_position.x += -(mouse_last_location.x - mouse_first_location.x) elif Input.is_action_just_released("click"): time_since_first_location += delta mouse_release_location = get_global_mouse_position() if mouse_release_location.x < mouse_first_location.x: var distance = mouse_release_location.x - mouse_first_location.x velocity = (distance / (velocity_coeffecient * delta)) draggable = false elif mouse_release_location.x > mouse_first_location.x: var distance = abs(mouse_first_location.x - mouse_release_location.x) velocity = (distance / (velocity_coeffecient * delta)) draggable = false # when the drag is complete, create a tween to ease out towards zero var tween = get_tree().create_tween() tween.tween_property(self, "velocity", 0, ease_out_time).set_ease(Tween.EASE_OUT) mouse_first_location = Vector2(0,0) mouse_release_location = Vector2(0,0) draggable = true if global_position.x >= max_x && velocity > 0: if bounce: velocity = -(velocity)/2 print("velocity negated, bouncing") global_position.x = max_x - 1 time_since_first_location = -1 draggable = true return elif global_position.x < min_x && velocity < 0: if bounce: velocity = -(velocity)/2 print("velocity negated, bouncing") global_position.x = min_x + 1 time_since_first_location = -1 draggable = true return mouse_last_location = get_global_mouse_position()