Private
Public Access
1
0

refactor client prediction tolerances; simplify logic and update thresholds for better handling of position corrections
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 8m41s

This commit is contained in:
Sebastian Unterschütz
2026-01-28 12:26:14 +01:00
parent af08c13255
commit 78742fc1c4
2 changed files with 45 additions and 31 deletions

View File

@@ -132,33 +132,25 @@ func (g *Game) ReconcileWithServer(serverState game.PlayerState) {
const (
// Toleranzen für Client-Abweichungen
smallTolerance = 4.0 // 2px - sofort korrigieren
normalTolerance = 225.0 // 15px - akzeptable Abweichung, sanfte Korrektur
largeTolerance = 900.0 // 30px - Warnschwelle, nur noch Monitoring
hugeTolerance = 10000.0 // 100px - kritisch (Teleport/Respawn)
acceptTolerance = 400.0 // 20px - Client-Wert wird akzeptiert, keine Korrektur
warnTolerance = 2500.0 // 50px - Warnung, nur noch Monitoring
criticalTolerance = 10000.0 // 100px - kritisch (Teleport/Respawn/Desync)
)
if dist < smallTolerance {
// Bei sehr kleinen Abweichungen (<2px): Sofort korrigieren um Drift zu vermeiden
g.predictedX = replayX
g.predictedY = replayY
} else if dist < normalTolerance {
// Bei kleinen Abweichungen (2-15px): Sanfte Korrektur, Client hat etwas Spielraum
interpFactor := 0.3 // Nur 30% Korrektur - mehr Client-Freiheit
if dist < acceptTolerance {
// Bei kleinen Abweichungen (<20px): Client-Position akzeptieren, KEINE Korrektur
// Server nimmt Client-Wert an
// (Client-seitige Prediction bleibt unverändert)
} else if dist < warnTolerance {
// Bei mittleren Abweichungen (20-50px): Nur Monitoring, KEINE Korrektur
// Der Unterschied wird toleriert - Client-Position wird akzeptiert
// Server überwacht weiterhin, greift aber nicht ein
} else if dist < criticalTolerance {
// Bei großen Abweichungen (50-100px): Sanfte Korrektur
interpFactor := 0.3 // Nur 30% Korrektur
g.predictedX += diffX * interpFactor
g.predictedY += diffY * interpFactor
g.correctionCount++
} else if dist < largeTolerance {
// Bei mittleren Abweichungen (15-30px): Stärkere Korrektur
interpFactor := 0.5 // 50% Korrektur
g.predictedX += diffX * interpFactor
g.predictedY += diffY * interpFactor
g.correctionCount++
} else if dist < hugeTolerance {
// Bei großen Abweichungen (30-100px): Nur noch Monitoring, KEINE Korrektur mehr
// Der Unterschied ist zu groß geworden - Client-Position wird akzeptiert
// Server überwacht weiterhin, greift aber nicht mehr ein
// (Dies verhindert "Ruckeln" bei starker Latenz)
} else {
// Bei kritischen Abweichungen (>100px): Sofort korrigieren (Teleport/Respawn/Desync)
g.predictedX = replayX