Noah Petherbridge
20771fbe13
Add the JSON format for embedding Actors (Doodad instances) inside of a Level. I made a test map that manually inserted a couple of actors. Actors are given to the Canvas responsible for the Level via the function `InstallActors()`. So it means you'll call LoadLevel and then InstallActors to hook everything up. The Canvas creates sub-Canvas widgets from each Actor. After drawing the main level geometry from the Canvas.Chunker, it calls the drawActors() function which does the same but for Actors. Levels keep a global map of all Actors that exist. For any Actors that are visible within the Viewport, their sub-Canvas widgets are presented appropriately on top of the parent Canvas. In case their sub-Canvas overlaps the parent's boundaries, their sub-Canvas is resized and moved appropriately. - Allow the MainWindow to be resized at run time, and the UI recalculates its sizing and position. - Made the in-game Shell properties editable via environment variables. The kirsle.env file sets a blue and pink color scheme. - Begin the ground work for Levels and Doodads to embed files inside their data via the level.FileSystem type. - UI: Labels can now contain line break characters. It will appropriately render multiple lines of render.Text and take into account the proper BoxSize to contain them all. - Add environment variable DOODLE_DEBUG_ALL=true that will turn on ALL debug overlay and visualization options. - Add debug overlay to "tag" each Canvas widget with some of its details, like its Name and World Position. Can be enabled with the environment variable DEBUG_CANVAS_LABEL=true - Improved the FPS debug overlay to show in labeled columns and multiple colors, with easy ability to add new data points to it.
61 lines
1016 B
Go
61 lines
1016 B
Go
package render_test
|
|
|
|
import (
|
|
"strconv"
|
|
"testing"
|
|
|
|
"git.kirsle.net/apps/doodle/render"
|
|
)
|
|
|
|
func TestPointInside(t *testing.T) {
|
|
type testCase struct {
|
|
rect render.Rect
|
|
p render.Point
|
|
shouldPass bool
|
|
}
|
|
tests := []testCase{
|
|
testCase{
|
|
rect: render.Rect{
|
|
X: 0,
|
|
Y: 0,
|
|
W: 500,
|
|
H: 500,
|
|
},
|
|
p: render.NewPoint(128, 256),
|
|
shouldPass: true,
|
|
},
|
|
testCase{
|
|
rect: render.Rect{
|
|
X: 100,
|
|
Y: 80,
|
|
W: 40,
|
|
H: 60,
|
|
},
|
|
p: render.NewPoint(128, 256),
|
|
shouldPass: false,
|
|
},
|
|
testCase{
|
|
// true values when debugging why Doodads weren't
|
|
// considered inside the viewport.
|
|
rect: render.Rect{
|
|
X: 0,
|
|
Y: -232,
|
|
H: 874,
|
|
W: 490,
|
|
},
|
|
p: render.NewPoint(509, 260),
|
|
shouldPass: true,
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
if test.p.Inside(test.rect) != test.shouldPass {
|
|
t.Errorf("Failed: %s inside %s should be %s",
|
|
test.p,
|
|
test.rect,
|
|
strconv.FormatBool(test.shouldPass),
|
|
)
|
|
}
|
|
}
|
|
}
|