Implement rover radar and use and test it

This commit is contained in:
Marc Di Luzio 2020-06-05 15:48:55 +01:00
parent e81ceecffc
commit ae369715ec
2 changed files with 31 additions and 3 deletions

View file

@ -133,11 +133,17 @@ type RadarDescription struct {
// RadarFromRover can be used to query what a rover can currently see
func (w World) RadarFromRover(id uuid.UUID) (RadarDescription, error) {
if _, ok := w.Rovers[id]; ok {
if r1, ok := w.Rovers[id]; ok {
var desc RadarDescription
// TODO: Gather nearby rovers within the range
// Gather nearby rovers within the range
for _, r2 := range w.Rovers {
if r1.Id != r2.Id && r1.Pos.Distance(r2.Pos) < r1.Attributes.Range {
desc.Rovers = append(desc.Rovers, r2.Pos)
}
}
return RadarDescription{}, nil
return desc, nil
} else {
return RadarDescription{}, fmt.Errorf("no rover matching id")
}

View file

@ -78,3 +78,25 @@ func TestWorld_GetSetMovePosition(t *testing.T) {
pos.Add(Vector{0, attribs.Speed * float64(duration)}) // We should have move one unit of the speed north
assert.Equal(t, pos, newpos, "Failed to correctly move position for rover")
}
func TestWorld_RadarFromRover(t *testing.T) {
world := NewWorld()
a := world.SpawnRover()
b := world.SpawnRover()
c := world.SpawnRover()
// Get a's attributes
attrib, err := world.RoverAttributes(a)
assert.NoError(t, err, "Failed to get rover attribs")
// Warp the rovers so a can see b but not c
assert.NoError(t, world.WarpRover(a, Vector{0, 0}), "Failed to warp rover")
assert.NoError(t, world.WarpRover(b, Vector{attrib.Range - 1, 0}), "Failed to warp rover")
assert.NoError(t, world.WarpRover(c, Vector{attrib.Range + 1, 0}), "Failed to warp rover")
radar, err := world.RadarFromRover(a)
assert.NoError(t, err, "Failed to get radar from rover")
assert.Equal(t, 1, len(radar.Rovers), "Radar returned wrong number of rovers")
assert.Equal(t, Vector{attrib.Range - 1, 0}, radar.Rovers[0], "Rover on radar in wrong position")
}