aboutsummaryrefslogtreecommitdiff
path: root/map.go
diff options
context:
space:
mode:
Diffstat (limited to 'map.go')
-rw-r--r--map.go45
1 files changed, 31 insertions, 14 deletions
diff --git a/map.go b/map.go
index 1ffae23..3ded174 100644
--- a/map.go
+++ b/map.go
@@ -7,9 +7,15 @@ import (
"sync"
)
+type MapBlk struct {
+ data *mt.MapBlk
+ edges [6]*PathfindEdge
+}
+
type Map struct {
mu sync.Mutex
- blocks map[[3]int16]*mt.MapBlk
+ pathfind bool
+ blocks map[[3]int16]*MapBlk
userdata *lua.LUserData
}
@@ -24,7 +30,7 @@ func getMap(l *lua.LState, idx int) *Map {
func newMap(l *lua.LState) *Map {
mp := &Map{}
- mp.blocks = map[[3]int16]*mt.MapBlk{}
+ mp.blocks = map[[3]int16]*MapBlk{}
mp.userdata = l.NewUserData()
mp.userdata.Value = mp
l.SetMetatable(mp.userdata, l.GetTypeMetatable("hydra.map"))
@@ -34,15 +40,26 @@ func newMap(l *lua.LState) *Map {
func (mp *Map) process(client *Client, pkt *mt.Pkt) {
switch cmd := pkt.Cmd.(type) {
case *mt.ToCltBlkData:
- mp.mu.Lock()
- mp.blocks[cmd.Blkpos] = &cmd.Blk
- mp.mu.Unlock()
+ go func() {
+ mp.mu.Lock()
+ defer mp.mu.Unlock()
+
+ blk := &MapBlk{}
+ blk.data = &cmd.Blk
+ if mp.pathfind {
+ pfPreprocess(mp, cmd.Blkpos, blk)
+ }
+
+ mp.blocks[cmd.Blkpos] = blk
+ }()
+
client.conn.SendCmd(&mt.ToSrvGotBlks{Blks: [][3]int16{cmd.Blkpos}})
}
}
func l_map(l *lua.LState) int {
mp := newMap(l)
+ mp.pathfind = l.ToBool(1)
l.Push(mp.userdata)
return 1
}
@@ -55,9 +72,9 @@ func l_map_block(l *lua.LState) int {
mp.mu.Lock()
defer mp.mu.Unlock()
- block, ok := mp.blocks[blkpos]
+ blk, ok := mp.blocks[blkpos]
if ok {
- l.Push(convert.PushMapBlk(l, *block))
+ l.Push(convert.PushMapBlk(l, *blk.data))
} else {
l.Push(lua.LNil)
}
@@ -75,17 +92,17 @@ func l_map_node(l *lua.LState) int {
mp.mu.Lock()
defer mp.mu.Unlock()
- block, block_exists := mp.blocks[blkpos]
- if block_exists {
- meta, meta_exists := block.NodeMetas[i]
- if !meta_exists {
+ blk, blk_ok := mp.blocks[blkpos]
+ if blk_ok {
+ meta, meta_ok := blk.data.NodeMetas[i]
+ if !meta_ok {
meta = &mt.NodeMeta{}
}
lnode := l.NewTable()
- l.SetField(lnode, "param0", lua.LNumber(block.Param0[i]))
- l.SetField(lnode, "param1", lua.LNumber(block.Param1[i]))
- l.SetField(lnode, "param2", lua.LNumber(block.Param2[i]))
+ l.SetField(lnode, "param0", lua.LNumber(blk.data.Param0[i]))
+ l.SetField(lnode, "param1", lua.LNumber(blk.data.Param1[i]))
+ l.SetField(lnode, "param2", lua.LNumber(blk.data.Param2[i]))
l.SetField(lnode, "meta", convert.PushNodeMeta(l, *meta))
l.Push(lnode)
} else {