93 lines
1.9 KiB
Go
93 lines
1.9 KiB
Go
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)
|
|
}
|