| 47 | } |
| 48 | |
| 49 | func TestSpaceComponent_Contains_Hitboxes(t *testing.T) { |
| 50 | scs := []SpaceComponent{} |
| 51 | space0 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 0, Y: 0}} //AABB |
| 52 | space1 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 10, Y: 0}} //Triangle |
| 53 | space1.AddShape(Shape{Lines: []engo.Line{ |
| 54 | {P1: engo.Point{X: 0, Y: 0}, P2: engo.Point{X: 0, Y: 5}}, |
| 55 | {P1: engo.Point{X: 0, Y: 5}, P2: engo.Point{X: 5, Y: 5}}, |
| 56 | {P1: engo.Point{X: 5, Y: 5}, P2: engo.Point{X: 0, Y: 0}}, |
| 57 | }}) |
| 58 | space2 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 0, Y: 10}} //Multi-Shape |
| 59 | space2.AddShape(Shape{Lines: []engo.Line{ |
| 60 | {P1: engo.Point{X: 2.5, Y: 0}, P2: engo.Point{X: 2.5 + 0.57735026919, Y: 1}}, |
| 61 | {P1: engo.Point{X: 2.5 + 0.57735026919, Y: 1}, P2: engo.Point{X: 2.5 - 0.57735026919, Y: 1}}, |
| 62 | {P1: engo.Point{X: 2.5 - 0.57735026919, Y: 1}, P2: engo.Point{X: 2.5, Y: 0}}, |
| 63 | }}) |
| 64 | space2.AddShape(Shape{Lines: []engo.Line{ |
| 65 | {P1: engo.Point{X: 0, Y: 2.5}, P2: engo.Point{X: 1, Y: 2.5 + 0.57735026919}}, |
| 66 | {P1: engo.Point{X: 1, Y: 2.5 + 0.57735026919}, P2: engo.Point{X: 1, Y: 2.5 - 0.57735026919}}, |
| 67 | {P1: engo.Point{X: 1, Y: 2.5 - 0.57735026919}, P2: engo.Point{X: 0, Y: 2.5}}, |
| 68 | }}) |
| 69 | space2.AddShape(Shape{Lines: []engo.Line{ |
| 70 | {P1: engo.Point{X: 5, Y: 2.5}, P2: engo.Point{X: 4, Y: 2.5 + 0.57735026919}}, |
| 71 | {P1: engo.Point{X: 4, Y: 2.5 + 0.57735026919}, P2: engo.Point{X: 4, Y: 2.5 - 0.57735026919}}, |
| 72 | {P1: engo.Point{X: 4, Y: 2.5 - 0.57735026919}, P2: engo.Point{X: 5, Y: 2.5}}, |
| 73 | }}) |
| 74 | space2.AddShape(Shape{Lines: []engo.Line{ |
| 75 | {P1: engo.Point{X: 0, Y: 5}, P2: engo.Point{X: 1.15470053838, Y: 5}}, |
| 76 | {P1: engo.Point{X: 1.15470053838, Y: 5}, P2: engo.Point{X: 0.57735026919, Y: 4}}, |
| 77 | {P1: engo.Point{X: 0.57735026919, Y: 4}, P2: engo.Point{X: 0, Y: 5}}, |
| 78 | }}) |
| 79 | space2.AddShape(Shape{Lines: []engo.Line{ |
| 80 | {P1: engo.Point{X: 5, Y: 5}, P2: engo.Point{X: 5 - 1.15470053838, Y: 5}}, |
| 81 | {P1: engo.Point{X: 5 - 1.15470053838, Y: 5}, P2: engo.Point{X: 5 - 0.57735026919, Y: 5}}, |
| 82 | {P1: engo.Point{X: 5 - 0.57735026919, Y: 5}, P2: engo.Point{X: 5, Y: 5}}, |
| 83 | }}) |
| 84 | space3 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 10, Y: 10}} //Circle |
| 85 | space3.AddShape(Shape{Ellipse: Ellipse{Rx: 2.5, Cx: 2.5, Ry: 2.5, Cy: 2.5}}) |
| 86 | space4 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 20, Y: 0}} //Ellipse |
| 87 | space4.AddShape(Shape{Ellipse: Ellipse{Rx: 2.5, Cx: 2.5, Ry: 5, Cy: 2.5}}) |
| 88 | space5 := SpaceComponent{Width: 5, Height: 5, Position: engo.Point{X: 0, Y: 20}, Rotation: 30} //Ellipse-Rotated |
| 89 | space5.AddShape(Shape{Ellipse: Ellipse{Rx: 2.5, Cx: 2.5, Ry: 5, Cy: 2.5}}) |
| 90 | scs = append(scs, space0, space1, space2, space3, space4, space5) |
| 91 | pts := []engo.Point{ |
| 92 | {X: 2.5, Y: 2.5}, |
| 93 | {X: 12.5, Y: 2.5}, |
| 94 | {X: 0.5, Y: 12.5}, |
| 95 | {X: 12.5, Y: 12.5}, |
| 96 | {X: 22.5, Y: 2.5}, |
| 97 | {X: 2.5, Y: 22.5}, |
| 98 | } |
| 99 | for i := 0; i < len(scs); i++ { |
| 100 | for j := 0; j < len(pts); j++ { |
| 101 | if i == j { |
| 102 | if !scs[i].Contains(pts[j]) { |
| 103 | println(scs[i].Position.X, scs[i].Position.Y, pts[j].X, pts[j].Y) |
| 104 | t.Errorf("Space Component %v did not contain point %v, but should.", i, j) |
| 105 | } |
| 106 | continue |