blockaccessor.GetBlock(x,y,z) and simple test
This commit is contained in:
parent
c608e058d5
commit
7baaec5581
43
blockaccessor/blockaccessor.go
Normal file
43
blockaccessor/blockaccessor.go
Normal file
@ -0,0 +1,43 @@
|
||||
package blockaccessor
|
||||
|
||||
import (
|
||||
"mapserver/coords"
|
||||
"mapserver/mapblockaccessor"
|
||||
)
|
||||
|
||||
func New(mba *mapblockaccessor.MapBlockAccessor) *BlockAccessor {
|
||||
return &BlockAccessor{mba: mba}
|
||||
}
|
||||
|
||||
type BlockAccessor struct {
|
||||
mba *mapblockaccessor.MapBlockAccessor
|
||||
}
|
||||
|
||||
type Block struct {
|
||||
Name string
|
||||
//TODO: param1, param2
|
||||
}
|
||||
|
||||
func (this *BlockAccessor) GetBlock(x, y, z int) (*Block, error) {
|
||||
|
||||
mbc := coords.NewMapBlockCoordsFromBlock(x, y, z)
|
||||
mapblock, err := this.mba.GetMapBlock(mbc)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if mapblock == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
relx := x % 16
|
||||
rely := y % 16
|
||||
relz := z % 16
|
||||
|
||||
block := Block{
|
||||
Name: mapblock.GetNodeName(relx, rely, relz),
|
||||
}
|
||||
|
||||
return &block, nil
|
||||
}
|
59
blockaccessor/blockaccessor_test.go
Normal file
59
blockaccessor/blockaccessor_test.go
Normal file
@ -0,0 +1,59 @@
|
||||
package blockaccessor
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"mapserver/db/sqlite"
|
||||
"mapserver/mapblockaccessor"
|
||||
"mapserver/testutils"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
func TestSimpleAccess(t *testing.T) {
|
||||
logrus.SetLevel(logrus.DebugLevel)
|
||||
|
||||
tmpfile, err := ioutil.TempFile("", "TestMigrate.*.sqlite")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer os.Remove(tmpfile.Name())
|
||||
testutils.CreateTestDatabase(tmpfile.Name())
|
||||
|
||||
a, err := sqlite.New(tmpfile.Name())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = a.Migrate()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
mba := mapblockaccessor.NewMapBlockAccessor(a, 500*time.Millisecond, 1000*time.Millisecond, 1000)
|
||||
|
||||
if mba == nil {
|
||||
t.Fatal("Mapblockaccessor is nil")
|
||||
}
|
||||
|
||||
ba := New(mba)
|
||||
|
||||
if ba == nil {
|
||||
t.Fatal("blockaccessor is nil")
|
||||
}
|
||||
|
||||
block, err := ba.GetBlock(0, 2, 0)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if block == nil {
|
||||
t.Fatal("block is nil")
|
||||
}
|
||||
|
||||
fmt.Println(block.Name)
|
||||
}
|
@ -1,5 +1,9 @@
|
||||
package coords
|
||||
|
||||
import (
|
||||
"math"
|
||||
)
|
||||
|
||||
type MapBlockCoords struct {
|
||||
X int `json:"x"`
|
||||
Y int `json:"y"`
|
||||
@ -10,6 +14,14 @@ func NewMapBlockCoords(x, y, z int) *MapBlockCoords {
|
||||
return &MapBlockCoords{X: x, Y: y, Z: z}
|
||||
}
|
||||
|
||||
func NewMapBlockCoordsFromBlock(x, y, z int) *MapBlockCoords {
|
||||
return &MapBlockCoords{
|
||||
X: int(math.Floor(float64(x) / 16)),
|
||||
Y: int(math.Floor(float64(y) / 16)),
|
||||
Z: int(math.Floor(float64(z) / 16)),
|
||||
}
|
||||
}
|
||||
|
||||
type MapBlockRange struct {
|
||||
Pos1, Pos2 *MapBlockCoords
|
||||
}
|
||||
|
26
coords/mapblockcoords_test.go
Normal file
26
coords/mapblockcoords_test.go
Normal file
@ -0,0 +1,26 @@
|
||||
package coords
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNewMapBlockCoordsFromBlock(t *testing.T) {
|
||||
c := NewMapBlockCoordsFromBlock(1, 1, 1)
|
||||
|
||||
if c.X != 0 || c.Y != 0 || c.Z != 0 {
|
||||
t.Fatal("mismatch", c)
|
||||
}
|
||||
|
||||
c = NewMapBlockCoordsFromBlock(16, 1, 1)
|
||||
|
||||
if c.X != 1 || c.Y != 0 || c.Z != 0 {
|
||||
t.Fatal("mismatch", c)
|
||||
}
|
||||
|
||||
c = NewMapBlockCoordsFromBlock(16, 1, -1)
|
||||
|
||||
if c.X != 1 || c.Y != 0 || c.Z != -1 {
|
||||
t.Fatal("mismatch", c)
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user