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) }