Make CCS vitals window draggable
This commit is contained in:
@@ -35,6 +35,7 @@ const DIALOGUE_BUBBLE_VERTICAL_CHROME := 95.0
|
||||
@onready var vitals_launcher: Button = $ComputerOverlay/VitalsLauncher
|
||||
@onready var vitals_window: PanelContainer = $ComputerOverlay/VitalsWindow
|
||||
@onready var vitals_close_button: Button = $ComputerOverlay/VitalsWindow/Margin/Content/Header/Close
|
||||
@onready var vitals_header: HBoxContainer = $ComputerOverlay/VitalsWindow/Margin/Content/Header
|
||||
@onready var vitals_rows: GridContainer = $ComputerOverlay/VitalsWindow/Margin/Content/Rows
|
||||
@onready var vitals_empty: Label = $ComputerOverlay/VitalsWindow/Margin/Content/Empty
|
||||
|
||||
@@ -53,6 +54,8 @@ var dialogue_reveal_complete := false
|
||||
var dialogue_layout_generation := 0
|
||||
var dialogue_input_enabled := true
|
||||
var computer_available := true
|
||||
var vitals_dragging := false
|
||||
var vitals_drag_offset := Vector2.ZERO
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -62,6 +65,7 @@ func _ready() -> void:
|
||||
computer_close_button.pressed.connect(close_computer)
|
||||
vitals_launcher.pressed.connect(open_vitals)
|
||||
vitals_close_button.pressed.connect(close_vitals)
|
||||
vitals_header.gui_input.connect(_on_vitals_header_gui_input)
|
||||
resized.connect(_resize_vitals_window)
|
||||
_style_vitals_window()
|
||||
_resize_vitals_window()
|
||||
@@ -308,6 +312,7 @@ func open_vitals() -> void:
|
||||
func close_vitals() -> bool:
|
||||
if not vitals_window.visible:
|
||||
return false
|
||||
vitals_dragging = false
|
||||
vitals_window.visible = false
|
||||
vitals_launcher.visible = true
|
||||
return true
|
||||
@@ -416,6 +421,31 @@ func _resize_vitals_window() -> void:
|
||||
vitals_window.offset_bottom = window_size.y * 0.5
|
||||
|
||||
|
||||
func _on_vitals_header_gui_input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
|
||||
if event.pressed:
|
||||
if vitals_close_button.get_global_rect().has_point(event.global_position):
|
||||
return
|
||||
vitals_dragging = true
|
||||
vitals_drag_offset = event.global_position - vitals_window.global_position
|
||||
else:
|
||||
vitals_dragging = false
|
||||
vitals_header.accept_event()
|
||||
elif event is InputEventMouseMotion and vitals_dragging:
|
||||
var target_global: Vector2 = event.global_position - vitals_drag_offset
|
||||
_set_vitals_window_position(target_global - global_position)
|
||||
vitals_header.accept_event()
|
||||
|
||||
|
||||
func _set_vitals_window_position(target: Vector2) -> void:
|
||||
var maximum := Vector2(
|
||||
maxf(0.0, size.x - vitals_window.size.x),
|
||||
maxf(0.0, size.y - vitals_window.size.y))
|
||||
vitals_window.position = Vector2(
|
||||
clampf(target.x, 0.0, maximum.x),
|
||||
clampf(target.y, 0.0, maximum.y))
|
||||
|
||||
|
||||
func _event_targets_computer_launcher(event: InputEvent) -> bool:
|
||||
if not computer_launcher.visible:
|
||||
return false
|
||||
|
||||
Reference in New Issue
Block a user