gamo-gd/controller/joystick/joystick.gd

46 lines
1.5 KiB
GDScript
Raw Normal View History

2026-01-24 15:49:06 +02:00
extends Panel
@onready var pos: Panel = $Pos
@onready var label_node: RichTextLabel = $Label
@onready var box_theme: StyleBoxFlat = preload("uid://bgb7rlf1chjnd") as StyleBoxFlat
@export var axis_x: JoyAxis
@export var axis_y: JoyAxis
var _dot_style: StyleBoxFlat
2026-01-24 17:06:05 +02:00
var _last_x := 0.0
var _last_y := 0.0
2026-01-24 15:49:06 +02:00
func _ready() -> void:
self._dot_style = box_theme.duplicate()
self.pos.add_theme_stylebox_override("panel", self._dot_style)
2026-01-24 17:06:05 +02:00
self._dot_style.bg_color = WyHelper.DEFAULT_COLOR
2026-01-24 15:49:06 +02:00
func _process(_delta: float) -> void:
var x := Input.get_joy_axis(0, self.axis_x)
var y := Input.get_joy_axis(0, self.axis_y)
self.pos.position.x = (x * 128.0) + 104.0
self.pos.position.y = (y * 128.0) + 104.0
2026-01-24 17:06:05 +02:00
var speed_x: float = abs(x - self._last_x)
var speed_y: float = abs(y - self._last_y)
var is_moving: bool = speed_x > WyHelper.DRIFT_DEADZONE || speed_y > WyHelper.DRIFT_DEADZONE
var is_drifting: bool = !is_moving && (speed_x > WyHelper.REST_DEADZONE || speed_y > WyHelper.REST_DEADZONE)
var is_stuck: bool = (abs(x) > WyHelper.DRIFT_DEADZONE && abs(x) <= WyHelper.STUCK_DEADZONE) \
&& (abs(y) > WyHelper.DRIFT_DEADZONE && abs(y) <= WyHelper.STUCK_DEADZONE)
2026-01-24 15:49:06 +02:00
2026-01-24 17:06:05 +02:00
if Config.track_joystick_movement && is_moving:
self._dot_style.bg_color = WyHelper.ACTIVE_COLOR
elif Config.track_joystick_drift && (is_drifting || is_stuck):
self._dot_style.bg_color = WyHelper.ERROR_COLOR
2026-01-24 15:49:06 +02:00
else:
2026-01-24 17:06:05 +02:00
self._dot_style.bg_color = WyHelper.DEFAULT_COLOR
if Config.joystick_labels:
self.label_node.text = "x:%0.2f y:%0.2f" % [x, y]
2026-01-24 15:49:06 +02:00
2026-01-24 17:06:05 +02:00
self._last_x = x
self._last_y = y