Adjust physics constants for better 20 TPS gameplay feel, refine smoothing and correction thresholds, and update cache-busting version for client assets.
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 2m15s
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 2m15s
This commit is contained in:
@@ -84,8 +84,8 @@ func (g *Game) UpdateGame() {
|
|||||||
// Lokale Physik sofort anwenden (Prediction)
|
// Lokale Physik sofort anwenden (Prediction)
|
||||||
g.ApplyInput(input)
|
g.ApplyInput(input)
|
||||||
|
|
||||||
// Sanfte Korrektur anwenden (schnellere Interpolation für weniger Ruckeln)
|
// Sanfte Korrektur anwenden (langsamer bei 20 TPS für weniger Jitter)
|
||||||
const smoothingFactor = 0.4 // Erhöht von 0.2 auf 0.4
|
const smoothingFactor = 0.15 // Reduziert für 20 TPS (war 0.4 bei 60 TPS)
|
||||||
if g.correctionX != 0 || g.correctionY != 0 {
|
if g.correctionX != 0 || g.correctionY != 0 {
|
||||||
g.predictedX += g.correctionX * smoothingFactor
|
g.predictedX += g.correctionX * smoothingFactor
|
||||||
g.predictedY += g.correctionY * smoothingFactor
|
g.predictedY += g.correctionY * smoothingFactor
|
||||||
@@ -93,8 +93,8 @@ func (g *Game) UpdateGame() {
|
|||||||
g.correctionX *= (1.0 - smoothingFactor)
|
g.correctionX *= (1.0 - smoothingFactor)
|
||||||
g.correctionY *= (1.0 - smoothingFactor)
|
g.correctionY *= (1.0 - smoothingFactor)
|
||||||
|
|
||||||
// Korrektur beenden wenn sehr klein (kleinerer Threshold)
|
// Korrektur beenden wenn sehr klein
|
||||||
if g.correctionX*g.correctionX+g.correctionY*g.correctionY < 0.25 {
|
if g.correctionX*g.correctionX+g.correctionY*g.correctionY < 1.0 {
|
||||||
g.correctionX = 0
|
g.correctionX = 0
|
||||||
g.correctionY = 0
|
g.correctionY = 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ func (g *Game) ApplyInput(input InputState) {
|
|||||||
|
|
||||||
// Sprung
|
// Sprung
|
||||||
if input.Jump && g.predictedGround {
|
if input.Jump && g.predictedGround {
|
||||||
g.predictedVY = -42.0 // war -14.0 bei 60 TPS (-14.0 * 3)
|
g.predictedVY = -30.0 // Reduziert für besseres Spielgefühl bei 20 TPS
|
||||||
g.predictedGround = false
|
g.predictedGround = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,8 +114,9 @@ func (g *Game) ReconcileWithServer(serverState game.PlayerState) {
|
|||||||
diffX := replayX - g.predictedX
|
diffX := replayX - g.predictedX
|
||||||
diffY := replayY - g.predictedY
|
diffY := replayY - g.predictedY
|
||||||
|
|
||||||
// Nur korrigieren wenn Differenz signifikant (reduzierter Threshold für weniger Ruckeln)
|
// Nur korrigieren wenn Differenz signifikant
|
||||||
const threshold = 2.0 // Reduziert von 5.0 auf 2.0
|
// Bei 20 TPS größerer Threshold wegen größerer normaler Abweichungen
|
||||||
|
const threshold = 5.0 // Erhöht für 20 TPS (war 2.0)
|
||||||
if diffX*diffX+diffY*diffY > threshold*threshold {
|
if diffX*diffX+diffY*diffY > threshold*threshold {
|
||||||
// Speichere Korrektur für sanfte Interpolation
|
// Speichere Korrektur für sanfte Interpolation
|
||||||
g.correctionX = diffX
|
g.correctionX = diffX
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ window.onWasmReady = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Cache Management - Version wird bei jedem Build aktualisiert
|
// Cache Management - Version wird bei jedem Build aktualisiert
|
||||||
const CACHE_VERSION = 1767637179526; // Wird durch Build-Prozess ersetzt
|
const CACHE_VERSION = 1767639190355; // Wird durch Build-Prozess ersetzt
|
||||||
|
|
||||||
// Fetch mit Cache-Busting
|
// Fetch mit Cache-Busting
|
||||||
async function fetchWithCache(url) {
|
async function fetchWithCache(url) {
|
||||||
|
|||||||
@@ -291,7 +291,7 @@
|
|||||||
<!-- WASM Execution -->
|
<!-- WASM Execution -->
|
||||||
<script>
|
<script>
|
||||||
// Cache-Busting für JavaScript-Dateien (wird beim Build aktualisiert)
|
// Cache-Busting für JavaScript-Dateien (wird beim Build aktualisiert)
|
||||||
const BUILD_VERSION = 1767637179526;
|
const BUILD_VERSION = 1767639190355;
|
||||||
document.write('<script src="wasm_exec.js?v=' + BUILD_VERSION + '"><\/script>');
|
document.write('<script src="wasm_exec.js?v=' + BUILD_VERSION + '"><\/script>');
|
||||||
document.write('<script src="game.js?v=' + BUILD_VERSION + '"><\/script>');
|
document.write('<script src="game.js?v=' + BUILD_VERSION + '"><\/script>');
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Binary file not shown.
@@ -261,12 +261,12 @@ func (r *Room) HandleInput(input game.ClientInput) {
|
|||||||
switch input.Type {
|
switch input.Type {
|
||||||
case "JUMP":
|
case "JUMP":
|
||||||
if p.OnGround {
|
if p.OnGround {
|
||||||
p.VY = -42.0 // war -14.0 bei 60 TPS (-14.0 * 3)
|
p.VY = -30.0 // Reduziert für besseres Spielgefühl bei 20 TPS
|
||||||
p.OnGround = false
|
p.OnGround = false
|
||||||
p.DoubleJumpUsed = false // Reset double jump on ground jump
|
p.DoubleJumpUsed = false // Reset double jump on ground jump
|
||||||
} else if p.HasDoubleJump && !p.DoubleJumpUsed {
|
} else if p.HasDoubleJump && !p.DoubleJumpUsed {
|
||||||
// Double Jump in der Luft
|
// Double Jump in der Luft
|
||||||
p.VY = -42.0 // war -14.0 bei 60 TPS (-14.0 * 3)
|
p.VY = -30.0 // Reduziert für besseres Spielgefühl bei 20 TPS
|
||||||
p.DoubleJumpUsed = true
|
p.DoubleJumpUsed = true
|
||||||
log.Printf("⚡ %s verwendet Double Jump!", p.Name)
|
log.Printf("⚡ %s verwendet Double Jump!", p.Name)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user