77 lines
1.6 KiB
GDScript
77 lines
1.6 KiB
GDScript
@tool
|
|
extends TabBar
|
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
# Script Spliter
|
|
# https://github.com/CodeNameTwister/Script-Spliter
|
|
#
|
|
# Script Spliter addon for godot 4
|
|
# author: "Twister"
|
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
|
|
|
|
signal on_start_drag(t : TabBar)
|
|
signal on_stop_drag(t : TabBar)
|
|
|
|
var is_drag : bool = false:
|
|
set(e):
|
|
is_drag = e
|
|
if is_drag:
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
|
|
else:
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
|
|
|
var _fms : float = 0.0
|
|
|
|
func reset() -> void:
|
|
if is_drag:
|
|
set_process(false)
|
|
is_drag = false
|
|
if is_inside_tree():
|
|
on_stop_drag.emit(null)
|
|
|
|
func _init() -> void:
|
|
if is_node_ready():
|
|
_ready()
|
|
|
|
func _ready() -> void:
|
|
set_process(false)
|
|
setup()
|
|
|
|
func _enter_tree() -> void:
|
|
if !is_in_group(&"__SPLITER_TAB__"):
|
|
add_to_group(&"__SPLITER_TAB__")
|
|
|
|
func _exit_tree() -> void:
|
|
if is_in_group(&"__SPLITER_TAB__"):
|
|
remove_from_group(&"__SPLITER_TAB__")
|
|
|
|
func _process(delta: float) -> void:
|
|
_fms += delta
|
|
if _fms > 0.24:
|
|
if is_drag:
|
|
if !Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
|
|
set_process(false)
|
|
is_drag = false
|
|
on_stop_drag.emit(self)
|
|
else:
|
|
on_start_drag.emit(self)
|
|
is_drag = true
|
|
|
|
func setup() -> void:
|
|
if !gui_input.is_connected(_on_input):
|
|
gui_input.connect(_on_input)
|
|
if !is_in_group(&"__SPLITER_TAB__"):
|
|
add_to_group(&"__SPLITER_TAB__")
|
|
|
|
func _on_input(e : InputEvent) -> void:
|
|
if e is InputEventMouseButton:
|
|
if e.button_index == 1:
|
|
is_drag = false
|
|
if e.pressed:
|
|
_fms = 0.0
|
|
set_process(true)
|
|
else:
|
|
set_process(false)
|
|
if _fms >= 0.24:
|
|
on_stop_drag.emit(self)
|