Move atlas package into rove

This commit is contained in:
Marc Di Luzio 2020-07-19 18:30:07 +01:00
parent c48274eb23
commit 9130cf2517
8 changed files with 23 additions and 26 deletions

View file

@ -1,4 +1,4 @@
package atlas package rove
import ( import (
"github.com/mdiluz/rove/pkg/maths" "github.com/mdiluz/rove/pkg/maths"

View file

@ -1,4 +1,4 @@
package atlas package rove
import ( import (
"testing" "testing"

View file

@ -1,4 +1,4 @@
package atlas package rove
import ( import (
"log" "log"

View file

@ -1,4 +1,4 @@
package atlas package rove
import ( import (
"github.com/mdiluz/rove/proto/roveapi" "github.com/mdiluz/rove/proto/roveapi"

View file

@ -6,7 +6,6 @@ import (
"time" "time"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/mdiluz/rove/pkg/atlas"
"github.com/mdiluz/rove/pkg/maths" "github.com/mdiluz/rove/pkg/maths"
) )
@ -31,7 +30,7 @@ type Rover struct {
Range int `json:"range"` Range int `json:"range"`
// Inventory represents any items the rover is carrying // Inventory represents any items the rover is carrying
Inventory []atlas.Object `json:"inventory"` Inventory []Object `json:"inventory"`
// Capacity is the maximum number of inventory items // Capacity is the maximum number of inventory items
Capacity int `json:"capacity"` Capacity int `json:"capacity"`

View file

@ -8,7 +8,6 @@ import (
"os" "os"
"sync" "sync"
"github.com/mdiluz/rove/pkg/atlas"
"github.com/mdiluz/rove/pkg/maths" "github.com/mdiluz/rove/pkg/maths"
"github.com/mdiluz/rove/proto/roveapi" "github.com/mdiluz/rove/proto/roveapi"
) )
@ -25,7 +24,7 @@ type World struct {
Rovers map[string]Rover `json:"rovers"` Rovers map[string]Rover `json:"rovers"`
// Atlas represends the world map of chunks and tiles // Atlas represends the world map of chunks and tiles
Atlas atlas.Atlas `json:"atlas"` Atlas Atlas `json:"atlas"`
// Commands is the set of currently executing command streams per rover // Commands is the set of currently executing command streams per rover
CommandQueue map[string]CommandStream `json:"commands"` CommandQueue map[string]CommandStream `json:"commands"`
@ -64,7 +63,7 @@ func NewWorld(chunkSize int) *World {
Rovers: make(map[string]Rover), Rovers: make(map[string]Rover),
CommandQueue: make(map[string]CommandStream), CommandQueue: make(map[string]CommandStream),
CommandIncoming: make(map[string]CommandStream), CommandIncoming: make(map[string]CommandStream),
Atlas: atlas.NewChunkAtlas(chunkSize), Atlas: NewChunkAtlas(chunkSize),
words: lines, words: lines,
TicksPerDay: 24, TicksPerDay: 24,
CurrentTicks: 0, CurrentTicks: 0,
@ -231,7 +230,7 @@ func (w *World) SetRoverPosition(rover string, pos maths.Vector) error {
} }
// RoverInventory returns the inventory of a requested rover // RoverInventory returns the inventory of a requested rover
func (w *World) RoverInventory(rover string) ([]atlas.Object, error) { func (w *World) RoverInventory(rover string) ([]Object, error) {
w.worldMutex.RLock() w.worldMutex.RLock()
defer w.worldMutex.RUnlock() defer w.worldMutex.RUnlock()
@ -337,7 +336,7 @@ func (w *World) RoverStash(rover string) (roveapi.Object, error) {
r.AddLogEntryf("stashed %c", obj.Type) r.AddLogEntryf("stashed %c", obj.Type)
r.Inventory = append(r.Inventory, obj) r.Inventory = append(r.Inventory, obj)
w.Rovers[rover] = r w.Rovers[rover] = r
w.Atlas.SetObject(r.Pos, atlas.Object{Type: roveapi.Object_ObjectUnknown}) w.Atlas.SetObject(r.Pos, Object{Type: roveapi.Object_ObjectUnknown})
return obj.Type, nil return obj.Type, nil
} }

View file

@ -3,7 +3,6 @@ package rove
import ( import (
"testing" "testing"
"github.com/mdiluz/rove/pkg/atlas"
"github.com/mdiluz/rove/pkg/maths" "github.com/mdiluz/rove/pkg/maths"
"github.com/mdiluz/rove/proto/roveapi" "github.com/mdiluz/rove/proto/roveapi"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -90,7 +89,7 @@ func TestWorld_GetSetMovePosition(t *testing.T) {
assert.Contains(t, rover.Logs[len(rover.Logs)-1].Text, "moved", "Rover logs should contain the move") assert.Contains(t, rover.Logs[len(rover.Logs)-1].Text, "moved", "Rover logs should contain the move")
// Place a tile in front of the rover // Place a tile in front of the rover
world.Atlas.SetObject(maths.Vector{X: 0, Y: 2}, atlas.Object{Type: roveapi.Object_RockLarge}) world.Atlas.SetObject(maths.Vector{X: 0, Y: 2}, Object{Type: roveapi.Object_RockLarge})
newPos, err = world.MoveRover(a, b) newPos, err = world.MoveRover(a, b)
assert.NoError(t, err, "Failed to move rover") assert.NoError(t, err, "Failed to move rover")
assert.Equal(t, pos, newPos, "Failed to correctly not move position for rover into wall") assert.Equal(t, pos, newPos, "Failed to correctly not move position for rover into wall")
@ -142,7 +141,7 @@ func TestWorld_RoverStash(t *testing.T) {
Y: 0.0, Y: 0.0,
} }
world.Atlas.SetObject(pos, atlas.Object{Type: roveapi.Object_ObjectUnknown}) world.Atlas.SetObject(pos, Object{Type: roveapi.Object_ObjectUnknown})
err = world.WarpRover(a, pos) err = world.WarpRover(a, pos)
assert.NoError(t, err, "Failed to set position for rover") assert.NoError(t, err, "Failed to set position for rover")
@ -151,7 +150,7 @@ func TestWorld_RoverStash(t *testing.T) {
for i := 0; i < rover.Capacity; i++ { for i := 0; i < rover.Capacity; i++ {
// Place an object // Place an object
world.Atlas.SetObject(pos, atlas.Object{Type: roveapi.Object_RockSmall}) world.Atlas.SetObject(pos, Object{Type: roveapi.Object_RockSmall})
// Pick it up // Pick it up
o, err := world.RoverStash(a) o, err := world.RoverStash(a)
@ -166,7 +165,7 @@ func TestWorld_RoverStash(t *testing.T) {
inv, err := world.RoverInventory(a) inv, err := world.RoverInventory(a)
assert.NoError(t, err, "Failed to get inventory") assert.NoError(t, err, "Failed to get inventory")
assert.Equal(t, i+1, len(inv)) assert.Equal(t, i+1, len(inv))
assert.Equal(t, atlas.Object{Type: roveapi.Object_RockSmall}, inv[i]) assert.Equal(t, Object{Type: roveapi.Object_RockSmall}, inv[i])
// Check that this did reduce the charge // Check that this did reduce the charge
info, err := world.GetRover(a) info, err := world.GetRover(a)
@ -183,7 +182,7 @@ func TestWorld_RoverStash(t *testing.T) {
} }
// Place an object // Place an object
world.Atlas.SetObject(pos, atlas.Object{Type: roveapi.Object_RockSmall}) world.Atlas.SetObject(pos, Object{Type: roveapi.Object_RockSmall})
// Try to pick it up // Try to pick it up
o, err := world.RoverStash(a) o, err := world.RoverStash(a)
@ -221,7 +220,7 @@ func TestWorld_RoverDamage(t *testing.T) {
info, err := world.GetRover(a) info, err := world.GetRover(a)
assert.NoError(t, err, "couldn't get rover info") assert.NoError(t, err, "couldn't get rover info")
world.Atlas.SetObject(maths.Vector{X: 0.0, Y: 1.0}, atlas.Object{Type: roveapi.Object_RockLarge}) world.Atlas.SetObject(maths.Vector{X: 0.0, Y: 1.0}, Object{Type: roveapi.Object_RockLarge})
vec, err := world.MoveRover(a, roveapi.Bearing_North) vec, err := world.MoveRover(a, roveapi.Bearing_North)
assert.NoError(t, err, "Failed to move rover") assert.NoError(t, err, "Failed to move rover")
@ -243,7 +242,7 @@ func TestWorld_RoverRepair(t *testing.T) {
Y: 0.0, Y: 0.0,
} }
world.Atlas.SetObject(pos, atlas.Object{Type: roveapi.Object_ObjectUnknown}) world.Atlas.SetObject(pos, Object{Type: roveapi.Object_ObjectUnknown})
err = world.WarpRover(a, pos) err = world.WarpRover(a, pos)
assert.NoError(t, err, "Failed to set position for rover") assert.NoError(t, err, "Failed to set position for rover")
@ -252,12 +251,12 @@ func TestWorld_RoverRepair(t *testing.T) {
assert.NoError(t, err, "couldn't get rover info") assert.NoError(t, err, "couldn't get rover info")
// Pick up something to repair with // Pick up something to repair with
world.Atlas.SetObject(pos, atlas.Object{Type: roveapi.Object_RockSmall}) world.Atlas.SetObject(pos, Object{Type: roveapi.Object_RockSmall})
o, err := world.RoverStash(a) o, err := world.RoverStash(a)
assert.NoError(t, err, "Failed to stash") assert.NoError(t, err, "Failed to stash")
assert.Equal(t, roveapi.Object_RockSmall, o, "Failed to get correct object") assert.Equal(t, roveapi.Object_RockSmall, o, "Failed to get correct object")
world.Atlas.SetObject(maths.Vector{X: 0.0, Y: 1.0}, atlas.Object{Type: roveapi.Object_RockLarge}) world.Atlas.SetObject(maths.Vector{X: 0.0, Y: 1.0}, Object{Type: roveapi.Object_RockLarge})
// Try and bump into the rock // Try and bump into the rock
vec, err := world.MoveRover(a, roveapi.Bearing_North) vec, err := world.MoveRover(a, roveapi.Bearing_North)
@ -277,7 +276,7 @@ func TestWorld_RoverRepair(t *testing.T) {
assert.Contains(t, newinfo.Logs[len(newinfo.Logs)-1].Text, "repair", "Rover logs should contain the repair") assert.Contains(t, newinfo.Logs[len(newinfo.Logs)-1].Text, "repair", "Rover logs should contain the repair")
// Check again that it can't repair past the max // Check again that it can't repair past the max
world.Atlas.SetObject(pos, atlas.Object{Type: roveapi.Object_RockSmall}) world.Atlas.SetObject(pos, Object{Type: roveapi.Object_RockSmall})
o, err = world.RoverStash(a) o, err = world.RoverStash(a)
assert.NoError(t, err, "Failed to stash") assert.NoError(t, err, "Failed to stash")
assert.Equal(t, roveapi.Object_RockSmall, o, "Failed to get correct object") assert.Equal(t, roveapi.Object_RockSmall, o, "Failed to get correct object")
@ -308,7 +307,7 @@ func TestWorld_Charge(t *testing.T) {
// Ensure the path ahead is empty // Ensure the path ahead is empty
world.Atlas.SetTile(initialPos.Added(maths.BearingToVector(roveapi.Bearing_North)), roveapi.Tile_Rock) world.Atlas.SetTile(initialPos.Added(maths.BearingToVector(roveapi.Bearing_North)), roveapi.Tile_Rock)
world.Atlas.SetObject(initialPos.Added(maths.BearingToVector(roveapi.Bearing_North)), atlas.Object{Type: roveapi.Object_ObjectUnknown}) world.Atlas.SetObject(initialPos.Added(maths.BearingToVector(roveapi.Bearing_North)), Object{Type: roveapi.Object_ObjectUnknown})
// Try and move north (along unblocked path) // Try and move north (along unblocked path)
newPos, err := world.MoveRover(a, roveapi.Bearing_North) newPos, err := world.MoveRover(a, roveapi.Bearing_North)
@ -390,7 +389,7 @@ func TestWorld_Broadcast(t *testing.T) {
assert.Contains(t, rb.Logs[len(rb.Logs)-1].Text, "ABC", "Rover A should have logged it's broadcast") assert.Contains(t, rb.Logs[len(rb.Logs)-1].Text, "ABC", "Rover A should have logged it's broadcast")
// Warp B outside of the range of A // Warp B outside of the range of A
world.Atlas.SetObject(maths.Vector{X: ra.Range, Y: 0}, atlas.Object{Type: roveapi.Object_ObjectUnknown}) world.Atlas.SetObject(maths.Vector{X: ra.Range, Y: 0}, Object{Type: roveapi.Object_ObjectUnknown})
assert.NoError(t, world.WarpRover(b, maths.Vector{X: ra.Range, Y: 0})) assert.NoError(t, world.WarpRover(b, maths.Vector{X: ra.Range, Y: 0}))
// Broadcast from a again // Broadcast from a again
@ -407,7 +406,7 @@ func TestWorld_Broadcast(t *testing.T) {
assert.Contains(t, rb.Logs[len(rb.Logs)-1].Text, "XYZ", "Rover A should have logged it's broadcast") assert.Contains(t, rb.Logs[len(rb.Logs)-1].Text, "XYZ", "Rover A should have logged it's broadcast")
// Warp B outside of the range of A // Warp B outside of the range of A
world.Atlas.SetObject(maths.Vector{X: ra.Range + 1, Y: 0}, atlas.Object{Type: roveapi.Object_ObjectUnknown}) world.Atlas.SetObject(maths.Vector{X: ra.Range + 1, Y: 0}, Object{Type: roveapi.Object_ObjectUnknown})
assert.NoError(t, world.WarpRover(b, maths.Vector{X: ra.Range + 1, Y: 0})) assert.NoError(t, world.WarpRover(b, maths.Vector{X: ra.Range + 1, Y: 0}))
// Broadcast from a again // Broadcast from a again

View file

@ -1,4 +1,4 @@
package atlas package rove
import ( import (
"github.com/mdiluz/rove/pkg/maths" "github.com/mdiluz/rove/pkg/maths"