ui: basic map scroller
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
package world
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestPoints_WrapCopies_AppearInsideViewportWhenViewportEqualsWorld(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
params := RenderParams{
|
||||
ViewportWidthPx: 10,
|
||||
ViewportHeightPx: 10,
|
||||
MarginXPx: 0,
|
||||
MarginYPx: 0,
|
||||
CameraXWorldFp: 5 * SCALE,
|
||||
CameraYWorldFp: 5 * SCALE,
|
||||
CameraZoom: 1.0,
|
||||
Options: &RenderOptions{
|
||||
Style: func() *RenderStyle {
|
||||
s := DefaultRenderStyle()
|
||||
s.PointRadiusPx = 2.0 // so that a point at 9 "spills" by 1 and needs a copy at -1
|
||||
return &s
|
||||
}(),
|
||||
},
|
||||
}
|
||||
|
||||
type tc struct {
|
||||
name string
|
||||
x, y float64
|
||||
wantCenters [][2]float64
|
||||
}
|
||||
|
||||
tests := []tc{
|
||||
{
|
||||
name: "bottom boundary wraps to top",
|
||||
x: 5,
|
||||
y: 9,
|
||||
wantCenters: [][2]float64{{5, 9}, {5, -1}},
|
||||
},
|
||||
{
|
||||
name: "right boundary wraps to left",
|
||||
x: 9,
|
||||
y: 5,
|
||||
wantCenters: [][2]float64{{9, 5}, {-1, 5}},
|
||||
},
|
||||
{
|
||||
name: "corner wraps to three extra copies",
|
||||
x: 9,
|
||||
y: 9,
|
||||
wantCenters: [][2]float64{{9, 9}, {9, -1}, {-1, 9}, {-1, -1}},
|
||||
},
|
||||
{
|
||||
name: "no wrap inside",
|
||||
x: 5,
|
||||
y: 5,
|
||||
wantCenters: [][2]float64{{5, 5}},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
tt := tt
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
w := NewWorld(10, 10)
|
||||
w.resetGrid(2 * SCALE)
|
||||
|
||||
_, err := w.AddPoint(tt.x, tt.y)
|
||||
require.NoError(t, err)
|
||||
|
||||
for _, obj := range w.objects {
|
||||
w.indexObject(obj)
|
||||
}
|
||||
|
||||
plan, err := w.buildRenderPlanStageA(params)
|
||||
require.NoError(t, err)
|
||||
|
||||
d := &fakePrimitiveDrawer{}
|
||||
style := DefaultRenderStyle()
|
||||
style.PointRadiusPx = 2.0
|
||||
|
||||
applyPointStyle(d, style)
|
||||
drawPointsFromPlanWithRadius(d, plan, w.W, w.H, style.PointRadiusPx)
|
||||
|
||||
cmds := d.CommandsByName("AddPoint")
|
||||
require.Len(t, cmds, len(tt.wantCenters))
|
||||
|
||||
got := make([][2]float64, 0, len(cmds))
|
||||
for _, c := range cmds {
|
||||
require.Len(t, c.Args, 3)
|
||||
got = append(got, [2]float64{c.Args[0], c.Args[1]})
|
||||
}
|
||||
|
||||
require.ElementsMatch(t, tt.wantCenters, got)
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user