MCPcopy Index your code
hub / github.com/EngoEngine/engo / TestSpaceComponent_Overlaps

Function TestSpaceComponent_Overlaps

common/collision_test.go:115–191  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

113}
114
115func TestSpaceComponent_Overlaps(t *testing.T) {
116 tol := engo.Point{X: 1e-5, Y: 1e-5}
117 scs := []SpaceComponent{}
118 space0 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 0, Y: 0}} //AABB
119 space1 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 10, Y: 0}} //Triangle
120 space1.AddShape(Shape{Lines: []engo.Line{
121 {P1: engo.Point{X: 0, Y: 0}, P2: engo.Point{X: 0, Y: 5}},
122 {P1: engo.Point{X: 0, Y: 5}, P2: engo.Point{X: 5, Y: 5}},
123 {P1: engo.Point{X: 5, Y: 5}, P2: engo.Point{X: 0, Y: 0}},
124 }})
125 space2 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 0, Y: 10}} //Multi-Shape
126 space2.AddShape(Shape{Lines: []engo.Line{
127 {P1: engo.Point{X: 2.5, Y: 0}, P2: engo.Point{X: 2.5 + 0.57735026919, Y: 1}},
128 {P1: engo.Point{X: 2.5 + 0.57735026919, Y: 1}, P2: engo.Point{X: 2.5 - 0.57735026919, Y: 1}},
129 {P1: engo.Point{X: 2.5 - 0.57735026919, Y: 1}, P2: engo.Point{X: 2.5, Y: 0}},
130 }})
131 space2.AddShape(Shape{Lines: []engo.Line{
132 {P1: engo.Point{X: 0, Y: 2.5}, P2: engo.Point{X: 1, Y: 2.5 + 0.57735026919}},
133 {P1: engo.Point{X: 1, Y: 2.5 + 0.57735026919}, P2: engo.Point{X: 1, Y: 2.5 - 0.57735026919}},
134 {P1: engo.Point{X: 1, Y: 2.5 - 0.57735026919}, P2: engo.Point{X: 0, Y: 2.5}},
135 }})
136 space2.AddShape(Shape{Lines: []engo.Line{
137 {P1: engo.Point{X: 5, Y: 2.5}, P2: engo.Point{X: 4, Y: 2.5 + 0.57735026919}},
138 {P1: engo.Point{X: 4, Y: 2.5 + 0.57735026919}, P2: engo.Point{X: 4, Y: 2.5 - 0.57735026919}},
139 {P1: engo.Point{X: 4, Y: 2.5 - 0.57735026919}, P2: engo.Point{X: 5, Y: 2.5}},
140 }})
141 space2.AddShape(Shape{Lines: []engo.Line{
142 {P1: engo.Point{X: 0, Y: 5}, P2: engo.Point{X: 1.15470053838, Y: 5}},
143 {P1: engo.Point{X: 1.15470053838, Y: 5}, P2: engo.Point{X: 0.57735026919, Y: 4}},
144 {P1: engo.Point{X: 0.57735026919, Y: 4}, P2: engo.Point{X: 0, Y: 5}},
145 }})
146 space2.AddShape(Shape{Lines: []engo.Line{
147 {P1: engo.Point{X: 5, Y: 5}, P2: engo.Point{X: 5 - 1.15470053838, Y: 5}},
148 {P1: engo.Point{X: 5 - 1.15470053838, Y: 5}, P2: engo.Point{X: 5 - 0.57735026919, Y: 5}},
149 {P1: engo.Point{X: 5 - 0.57735026919, Y: 5}, P2: engo.Point{X: 5, Y: 5}},
150 }})
151 space3 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 10, Y: 10}} //Circle
152 space3.AddShape(Shape{Ellipse: Ellipse{Rx: 2.5, Cx: 2.5, Ry: 2.5, Cy: 2.5}})
153 space4 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 20, Y: 0}} //Ellipse
154 space4.AddShape(Shape{Ellipse: Ellipse{Rx: 2.5, Cx: 2.5, Ry: 5, Cy: 2.5}})
155 space5 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 0, Y: 20}, Rotation: 30} //Ellipse-Rotated
156 space5.AddShape(Shape{Ellipse: Ellipse{Rx: 2.5, Cx: 2.5, Ry: 5, Cy: 2.5}})
157 scs = append(scs, space0, space1, space2, space3, space4, space5)
158
159 //nothing overlaps at first
160 for i := 1; i < len(scs); i++ {
161 if o, _ := scs[i].Overlaps(scs[0], tol, tol); o {
162 t.Errorf("Overlap detected when none of the scs should overlap. Was on Space Component %v", i)
163 }
164 }
165
166 for i := 1; i < len(scs); i++ {
167 scs[0].Position = scs[i].Position
168 if o, _ := scs[0].Overlaps(scs[i], tol, tol); !o {
169 t.Errorf("SpaceComponents 0 and %v did not overlap but should have", i)
170 }
171 }
172

Callers

nothing calls this directly

Calls 3

AddShapeMethod · 0.95
OverlapsMethod · 0.80
ErrorMethod · 0.45

Tested by

no test coverage detected