no-wrap option; pivoted exponential zoom
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
package world
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestClampCameraNoWrapViewport_ClampsToKeepViewportInsideWorld(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
worldW := 100 * SCALE
|
||||
worldH := 100 * SCALE
|
||||
zoomFp := SCALE // 1.0x
|
||||
|
||||
// viewport 40px => span 40 units => half 20.
|
||||
viewportW, viewportH := 40, 40
|
||||
|
||||
// Too far left/up => clamp to minCam=20
|
||||
cx, cy := ClampCameraNoWrapViewport(
|
||||
0, 0,
|
||||
viewportW, viewportH,
|
||||
zoomFp,
|
||||
worldW, worldH,
|
||||
)
|
||||
require.Equal(t, 20*SCALE, cx)
|
||||
require.Equal(t, 20*SCALE, cy)
|
||||
|
||||
// Too far right/down => clamp to maxCam=world-half=80
|
||||
cx, cy = ClampCameraNoWrapViewport(
|
||||
99*SCALE, 99*SCALE,
|
||||
viewportW, viewportH,
|
||||
zoomFp,
|
||||
worldW, worldH,
|
||||
)
|
||||
require.Equal(t, 80*SCALE, cx)
|
||||
require.Equal(t, 80*SCALE, cy)
|
||||
|
||||
// Inside range => unchanged
|
||||
cx, cy = ClampCameraNoWrapViewport(
|
||||
50*SCALE, 60*SCALE,
|
||||
viewportW, viewportH,
|
||||
zoomFp,
|
||||
worldW, worldH,
|
||||
)
|
||||
require.Equal(t, 50*SCALE, cx)
|
||||
require.Equal(t, 60*SCALE, cy)
|
||||
}
|
||||
|
||||
func TestClampCameraNoWrapViewport_WhenViewportLargerThanWorld_ForcesCenter(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
worldW := 50 * SCALE
|
||||
worldH := 50 * SCALE
|
||||
zoomFp := SCALE
|
||||
|
||||
// viewport 60px => span 60 units > world 50
|
||||
viewportW, viewportH := 60, 60
|
||||
|
||||
cx, cy := ClampCameraNoWrapViewport(
|
||||
0, 0,
|
||||
viewportW, viewportH,
|
||||
zoomFp,
|
||||
worldW, worldH,
|
||||
)
|
||||
|
||||
require.Equal(t, worldW/2, cx)
|
||||
require.Equal(t, worldH/2, cy)
|
||||
}
|
||||
|
||||
func TestWorldClampRenderParamsNoWrap_UsesViewportClamp(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
w := NewWorld(100, 100)
|
||||
|
||||
p := RenderParams{
|
||||
ViewportWidthPx: 40,
|
||||
ViewportHeightPx: 40,
|
||||
MarginXPx: 10,
|
||||
MarginYPx: 10,
|
||||
CameraZoom: 1.0,
|
||||
CameraXWorldFp: 0,
|
||||
CameraYWorldFp: 0,
|
||||
Options: &RenderOptions{DisableWrapScroll: true},
|
||||
}
|
||||
|
||||
w.ClampRenderParamsNoWrap(&p)
|
||||
|
||||
// viewport half is 20, not 30 (margins ignored)
|
||||
require.Equal(t, 20*SCALE, p.CameraXWorldFp)
|
||||
require.Equal(t, 20*SCALE, p.CameraYWorldFp)
|
||||
}
|
||||
Reference in New Issue
Block a user