Remove special case wall collisions, replace with generated objects
This commit is contained in:
parent
78b1711cd9
commit
ef33a17b6a
35
obstacle.go
35
obstacle.go
@ -49,24 +49,41 @@ func (o Obstacle) distance_from_point(p v.Point2d) float64 {
|
|||||||
return dist
|
return dist
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func obstacleFromValues(x, y, w, h float64, hp int) (o Obstacle) {
|
||||||
|
return Obstacle{
|
||||||
|
Bounds: v.AABB2d{
|
||||||
|
A: v.Point2d{X: x, Y: y},
|
||||||
|
B: v.Point2d{X: x + w, Y: y + h},
|
||||||
|
},
|
||||||
|
Hp: hp,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GenerateObstacles returns a slice of (count) obstacles within a region
|
// GenerateObstacles returns a slice of (count) obstacles within a region
|
||||||
// bounded by width, height.
|
// bounded by width, height.
|
||||||
func GenerateObstacles(count int, width, height float64) []Obstacle {
|
func GenerateObstacles(count int, width, height float64) []Obstacle {
|
||||||
out := []Obstacle{}
|
out := []Obstacle{}
|
||||||
|
|
||||||
|
// Create obstacles that cover the edges of the world, so we don't need to
|
||||||
|
// special case collision at the edges
|
||||||
|
// left wall
|
||||||
|
out = append(out, obstacleFromValues(0, 5, 5, height-10, 0))
|
||||||
|
// // right wall
|
||||||
|
out = append(out, obstacleFromValues(width-5, 5, 5, height-10, 0))
|
||||||
|
// // top wall
|
||||||
|
out = append(out, obstacleFromValues(0, height-5, width, 5, 0))
|
||||||
|
// bottom wall
|
||||||
|
out = append(out, obstacleFromValues(0, 0, width, 5, 0))
|
||||||
|
|
||||||
|
// Now create N random objects somewhere in the world
|
||||||
for i := 0; i < count; i++ {
|
for i := 0; i < count; i++ {
|
||||||
x := rand.Float64() * (width - (width / 10))
|
x := rand.Float64() * (width - (width / 10))
|
||||||
y := rand.Float64() * (height - (height / 10))
|
y := rand.Float64() * (height - (height / 10))
|
||||||
w := rand.Float64() * (width / 10)
|
w := rand.Float64()*(width/10) + 20
|
||||||
h := rand.Float64() * (height / 10)
|
h := rand.Float64()*(height/10) + 20
|
||||||
out = append(
|
out = append(
|
||||||
out,
|
out,
|
||||||
Obstacle{
|
obstacleFromValues(x, y, w, h, 10000))
|
||||||
Bounds: v.AABB2d{
|
|
||||||
A: v.Point2d{X: x, Y: y},
|
|
||||||
B: v.Point2d{X: 20 + x + w, Y: 20 + y + h},
|
|
||||||
},
|
|
||||||
Hp: 10000,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
23
robot.go
23
robot.go
@ -195,29 +195,8 @@ func (r *Robot) checkCollisions(g *Game, probe v.Vector2d) (bool, *v.Point2d, *R
|
|||||||
botSize := 5.0
|
botSize := 5.0
|
||||||
botPolygon := v.OrientedSquare(r.Position, r.Heading, botSize)
|
botPolygon := v.OrientedSquare(r.Position, r.Heading, botSize)
|
||||||
|
|
||||||
bounds := []Obstacle{
|
|
||||||
Obstacle{
|
|
||||||
Bounds: v.AABB2d{A: v.Point2d{0, 0}, B: v.Point2d{0, g.width}},
|
|
||||||
Hp: 0,
|
|
||||||
},
|
|
||||||
Obstacle{
|
|
||||||
Bounds: v.AABB2d{A: v.Point2d{0, 0}, B: v.Point2d{0, g.height}},
|
|
||||||
Hp: 0,
|
|
||||||
},
|
|
||||||
Obstacle{
|
|
||||||
Bounds: v.AABB2d{A: v.Point2d{g.width, g.height}, B: v.Point2d{0, g.height}},
|
|
||||||
Hp: 0,
|
|
||||||
},
|
|
||||||
Obstacle{
|
|
||||||
Bounds: v.AABB2d{A: v.Point2d{g.width, g.height}, B: v.Point2d{g.width, 0}},
|
|
||||||
Hp: 0,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
obstacles := append(g.obstacles, bounds...)
|
|
||||||
|
|
||||||
// Check Obstacles
|
// Check Obstacles
|
||||||
for _, obj := range obstacles {
|
for _, obj := range g.obstacles {
|
||||||
// collision due to motion:
|
// collision due to motion:
|
||||||
collision, move_collision, translation := v.PolyPolyIntersection(
|
collision, move_collision, translation := v.PolyPolyIntersection(
|
||||||
botPolygon, probe, obj.Bounds.ToPolygon())
|
botPolygon, probe, obj.Bounds.ToPolygon())
|
||||||
|
Loading…
Reference in New Issue
Block a user