From ae369715ec637bc015bebfb6cbb6cdceba8d64e6 Mon Sep 17 00:00:00 2001 From: Marc Di Luzio Date: Fri, 5 Jun 2020 15:48:55 +0100 Subject: [PATCH] Implement rover radar and use and test it --- pkg/game/world.go | 12 +++++++++--- pkg/game/world_test.go | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/pkg/game/world.go b/pkg/game/world.go index 813f07d..3470864 100644 --- a/pkg/game/world.go +++ b/pkg/game/world.go @@ -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") } diff --git a/pkg/game/world_test.go b/pkg/game/world_test.go index 55fee3c..ddb8bd0 100644 --- a/pkg/game/world_test.go +++ b/pkg/game/world_test.go @@ -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") + +}