Some updated math and a config loader

master
Wynd 2026-01-24 17:06:05 +02:00
parent b196f42f5f
commit 46df5f3696
7 changed files with 86 additions and 25 deletions

45
config.gd 100644
View File

@ -0,0 +1,45 @@
extends Node
const PATH := "user://config.cfg"
const SECTION := "settings"
const JOYSTICK_LABELS := "joystick_labels"
const TRACK_JOYSTICK_MOVEMENT := "track_joystick_movement"
const TRACK_JOYSTICK_DRIFT := "track_joystick_drift"
var _config: ConfigFile
# Joystick
var joystick_labels: bool = true:
set(val):
joystick_labels = val
save_config()
var track_joystick_movement: bool = true:
set(val):
track_joystick_movement = val
save_config()
var track_joystick_drift: bool = true:
set(val):
track_joystick_drift = val
save_config()
func _ready() -> void:
self._config = ConfigFile.new()
var err := self._config.load(PATH)
if err != OK:
self.save_config()
print_debug("Auto generated config file")
self.joystick_labels = self._config.get_value(SECTION, JOYSTICK_LABELS, true)
self.track_joystick_movement = self._config.get_value(SECTION, TRACK_JOYSTICK_MOVEMENT, true)
self.track_joystick_drift = self._config.get_value(SECTION, TRACK_JOYSTICK_DRIFT, true)
func save_config() -> void:
self._config.set_value(SECTION, JOYSTICK_LABELS, self.joystick_labels)
self._config.set_value(SECTION, TRACK_JOYSTICK_MOVEMENT, self.track_joystick_movement)
self._config.set_value(SECTION, TRACK_JOYSTICK_DRIFT, self.track_joystick_drift)
var err := self._config.save(PATH)
if err != OK:
printerr("Failed to save config")
return

1
config.gd.uid 100644
View File

@ -0,0 +1 @@
uid://doaovsp1ac3o0

View File

@ -1,10 +1,5 @@
extends Control
const NO_DEVICE := "No Active Device"
const DEFAULT_COLOR := Color(0x2a2a2aff)
const ACTIVE_COLOR := Color(0x4a8e53ff)
@onready var device_name: RichTextLabel = $Device
var _has_joy := false
@ -27,7 +22,7 @@ func _process(_delta: float) -> void:
if Input.get_connected_joypads().size() <= 0:
self._has_joy = false
self.device_name.text = NO_DEVICE
self.device_name.text = WyHelper.NO_DEVICE
return
for btn in self._buttons:
@ -35,10 +30,10 @@ func _process(_delta: float) -> void:
continue
var cbtn := btn as ControllerButton
cbtn.color = DEFAULT_COLOR
cbtn.color = WyHelper.DEFAULT_COLOR
if cbtn.input_code && Input.is_action_pressed(cbtn.input_code):
cbtn.color = ACTIVE_COLOR
cbtn.color = WyHelper.ACTIVE_COLOR
for btn in self._triggers:
if not btn is ControllerTrigger:

View File

@ -1,11 +1,5 @@
extends Panel
const DRIFT_DEADZONE := 0.03;
const REST_DEADZONE := 0.05;
const DEFAULT_COLOR := Color(0x2a2a2aff)
const ACTIVE_COLOR := Color(0x4a8e53ff)
const ERROR_COLOR := Color(0xbe2037ff)
@onready var pos: Panel = $Pos
@onready var label_node: RichTextLabel = $Label
@onready var box_theme: StyleBoxFlat = preload("uid://bgb7rlf1chjnd") as StyleBoxFlat
@ -14,11 +8,13 @@ const ERROR_COLOR := Color(0xbe2037ff)
@export var axis_y: JoyAxis
var _dot_style: StyleBoxFlat
var _last_x := 0.0
var _last_y := 0.0
func _ready() -> void:
self._dot_style = box_theme.duplicate()
self.pos.add_theme_stylebox_override("panel", self._dot_style)
self._dot_style.bg_color = DEFAULT_COLOR
self._dot_style.bg_color = WyHelper.DEFAULT_COLOR
func _process(_delta: float) -> void:
var x := Input.get_joy_axis(0, self.axis_x)
@ -27,16 +23,23 @@ func _process(_delta: float) -> void:
self.pos.position.x = (x * 128.0) + 104.0
self.pos.position.y = (y * 128.0) + 104.0
var is_moving := x > REST_DEADZONE || y > REST_DEADZONE \
|| x < -REST_DEADZONE || y < -REST_DEADZONE
var is_drifting := x >= DRIFT_DEADZONE || y >= DRIFT_DEADZONE \
|| x <= -DRIFT_DEADZONE || y <= -DRIFT_DEADZONE
var speed_x: float = abs(x - self._last_x)
var speed_y: float = abs(y - self._last_y)
if is_moving:
self._dot_style.bg_color = ACTIVE_COLOR
elif is_drifting:
self._dot_style.bg_color = ERROR_COLOR
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)
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
else:
self._dot_style.bg_color = DEFAULT_COLOR
self._dot_style.bg_color = WyHelper.DEFAULT_COLOR
if Config.joystick_labels:
self.label_node.text = "x:%0.2f y:%0.2f" % [x, y]
self._last_x = x
self._last_y = y

11
helper.gd 100644
View File

@ -0,0 +1,11 @@
extends Node
const NO_DEVICE := "No Active Device"
const DRIFT_DEADZONE := 0.01;
const REST_DEADZONE := 0.005;
const STUCK_DEADZONE := 0.05;
const DEFAULT_COLOR := Color(0x2a2a2aff)
const ACTIVE_COLOR := Color(0x4a8e53ff)
const ERROR_COLOR := Color(0xbe2037ff)

1
helper.gd.uid 100644
View File

@ -0,0 +1 @@
uid://dn6sj0up74oxj

View File

@ -20,6 +20,11 @@ boot_splash/fullsize=false
boot_splash/use_filter=false
config/icon="res://icon.svg"
[autoload]
WyHelper="*res://helper.gd"
Config="*res://config.gd"
[debug]
gdscript/warnings/untyped_declaration=2