diff --git a/cmd/client/main.go b/cmd/client/main.go index 5ca5ff9..025b3ee 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -688,54 +688,39 @@ func GetFloorYFromHeight(screenHeight int) float64 { return floorY } -// GetScale gibt den Scale-Faktor zurück um die Spielwelt an den Bildschirm anzupassen -// Auf Mobile: Scale < 1.0 (rauszoomen, damit mehr sichtbar ist) -// Auf Desktop: Scale = 1.0 (normale Größe) +// GetScale gibt den Scale-Faktor zurück um die Spielwelt an den Bildschirm anzupassen. +// Die Scale ist proportional zur Bildschirmhöhe relativ zur Referenz-Auflösung (720p), +// damit auf jedem Gerät dieselbe Menge Spielwelt sichtbar ist wie auf dem PC. func GetScale() float64 { _, h := ebiten.WindowSize() if h == 0 { h = ScreenHeight } - - // Mobile Geräte (kleine Bildschirme): Rauszoomen für bessere Sicht - if h <= 400 { - // Sehr kleine Bildschirme: 0.7x Scale (30% rauszoomen) - return 0.7 - } else if h <= 600 { - // Mittlere Bildschirme: 0.85x Scale (15% rauszoomen) - return 0.85 - } - - // Desktop/große Bildschirme: Normale Größe - return 1.0 + return GetScaleFromHeight(h) } -// GetScaleFromHeight - Scale mit expliziter Höhe +// GetScaleFromHeight - Scale proportional zur Bildschirmhöhe. +// scale = screenHeight / 720 (Referenz), maximal 1.0. func GetScaleFromHeight(screenHeight int) float64 { h := screenHeight if h == 0 { h = ScreenHeight } - - if h <= 400 { - return 0.7 - } else if h <= 600 { - return 0.85 + scale := float64(h) / float64(ScreenHeight) + if scale > 1.0 { + scale = 1.0 } - - return 1.0 + return scale } -// WorldToScreenY konvertiert Server-Welt-Y-Koordinate zu Bildschirm-Y-Koordinate -// Nimmt die tatsächliche Bildschirmhöhe als Parameter (wichtig für WASM!) +// WorldToScreenYWithHeight konvertiert Welt-Y zu Bildschirm-Y. +// Skaliert die Y-Achse genauso wie die X-Achse, damit das Seitenverhältnis +// der Spielwelt auf allen Geräten gleich bleibt. func WorldToScreenYWithHeight(worldY float64, screenHeight int) float64 { - // Server arbeitet mit festen Koordinaten (Boden bei Y=540 für 720px Referenz) - // Client will Boden dynamisch positionieren - serverFloorY := float64(RefFloorY) // Server-Boden (540 bei 720px) - clientFloorY := GetFloorYFromHeight(screenHeight) // Client-Boden (dynamisch) - yOffset := clientFloorY - serverFloorY // Verschiebung (z.B. 620 - 540 = +80px nach unten) - - return worldY + yOffset + viewScale := GetScaleFromHeight(screenHeight) + // Boden (Y=540) soll am unteren Bildschirmrand erscheinen (canvasH - 100). + floorScreenY := float64(screenHeight) - 100.0 + return (worldY-float64(RefFloorY))*viewScale + floorScreenY } func isHit(x, y, w, h int) bool {