Private
Public Access
1
0

Add analog joystick support with fine control adjustments, improve prediction smoothing, reduce correction thresholds, and enhance lobby and overlay UI responsiveness.
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 2m23s

This commit is contained in:
Sebastian Unterschütz
2026-01-04 19:43:09 +01:00
parent 6606d67a21
commit 98e955aad9
6 changed files with 164 additions and 48 deletions

View File

@@ -39,11 +39,22 @@ func (g *Game) UpdateGame() {
joyDir := 0.0
if g.joyActive {
diffX := g.joyStickX - g.joyBaseX
if diffX < -20 {
joyDir = -1
maxDist := 60.0 // Muss mit handleTouchInput() übereinstimmen
// Analoger Wert zwischen -1.0 und 1.0
joyDir = diffX / maxDist
// Clamp zwischen -1 und 1
if joyDir < -1.0 {
joyDir = -1.0
}
if diffX > 20 {
joyDir = 1
if joyDir > 1.0 {
joyDir = 1.0
}
// Deadzone für bessere Kontrolle
if joyDir > -0.15 && joyDir < 0.15 {
joyDir = 0
}
}
@@ -52,10 +63,11 @@ func (g *Game) UpdateGame() {
// Input State zusammenbauen
input := InputState{
Sequence: g.inputSequence,
Left: keyLeft || joyDir == -1,
Right: keyRight || joyDir == 1,
Left: keyLeft || joyDir < -0.1,
Right: keyRight || joyDir > 0.1,
Jump: keyJump || g.btnJumpActive,
Down: keyDown || isJoyDown,
JoyX: joyDir, // Analoge X-Achse speichern
}
g.btnJumpActive = false
@@ -72,8 +84,8 @@ func (g *Game) UpdateGame() {
// Lokale Physik sofort anwenden (Prediction)
g.ApplyInput(input)
// Sanfte Korrektur anwenden (20% pro Frame)
const smoothingFactor = 0.2
// Sanfte Korrektur anwenden (schnellere Interpolation für weniger Ruckeln)
const smoothingFactor = 0.4 // Erhöht von 0.2 auf 0.4
if g.correctionX != 0 || g.correctionY != 0 {
g.predictedX += g.correctionX * smoothingFactor
g.predictedY += g.correctionY * smoothingFactor
@@ -81,8 +93,8 @@ func (g *Game) UpdateGame() {
g.correctionX *= (1.0 - smoothingFactor)
g.correctionY *= (1.0 - smoothingFactor)
// Korrektur beenden wenn sehr klein
if g.correctionX*g.correctionX+g.correctionY*g.correctionY < 0.01 {
// Korrektur beenden wenn sehr klein (kleinerer Threshold)
if g.correctionX*g.correctionX+g.correctionY*g.correctionY < 0.25 {
g.correctionX = 0
g.correctionY = 0
}