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
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 2m23s
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user