4 "github.com/anon55555/mt"
5 "github.com/dragonfireclient/hydra-dragonfire/convert"
6 "github.com/yuin/gopher-lua"
13 blocks map[[3]int16]*mt.MapBlk
14 userdata *lua.LUserData
17 var mapFuncs = map[string]lua.LGFunction{
23 func getMap(l *lua.LState) *Map {
24 return l.CheckUserData(1).Value.(*Map)
27 func (mtmap *Map) create(client *Client, l *lua.LState) {
29 mtmap.blocks = map[[3]int16]*mt.MapBlk{}
30 mtmap.userdata = l.NewUserData()
31 mtmap.userdata.Value = mtmap
32 l.SetMetatable(mtmap.userdata, l.GetTypeMetatable("hydra.map"))
35 func (mtmap *Map) push() lua.LValue {
39 func (mtmap *Map) connect() {
42 func (mtmap *Map) process(pkt *mt.Pkt) {
43 switch cmd := pkt.Cmd.(type) {
44 case *mt.ToCltBlkData:
46 mtmap.blocks[cmd.Blkpos] = &cmd.Blk
47 mtmap.client.conn.SendCmd(&mt.ToSrvGotBlks{Blks: [][3]int16{cmd.Blkpos}})
52 func l_map_clear(l *lua.LState) int {
56 defer mtmap.mu.Unlock()
58 var cmd mt.ToSrvDeletedBlks
59 for pos := range mtmap.blocks {
60 cmd.Blks = append(cmd.Blks, pos)
63 mtmap.blocks = map[[3]int16]*mt.MapBlk{}
65 mtmap.client.conn.SendCmd(&cmd)
70 func l_map_block(l *lua.LState) int {
73 convert.ReadVec3Int16(l, l.Get(2), &blkpos)
76 defer mtmap.mu.Unlock()
78 block, ok := mtmap.blocks[blkpos]
80 l.Push(convert.PushMapBlk(l, *block))
88 func l_map_node(l *lua.LState) int {
92 convert.ReadVec3Int16(l, l.Get(2), &pos)
93 blkpos, i := mt.Pos2Blkpos(pos)
96 defer mtmap.mu.Unlock()
98 block, block_exists := mtmap.blocks[blkpos]
100 meta, meta_exists := block.NodeMetas[i]
102 meta = &mt.NodeMeta{}
105 lnode := l.NewTable()
106 l.SetField(lnode, "param0", lua.LNumber(block.Param0[i]))
107 l.SetField(lnode, "param1", lua.LNumber(block.Param1[i]))
108 l.SetField(lnode, "param2", lua.LNumber(block.Param2[i]))
109 l.SetField(lnode, "meta", convert.PushNodeMeta(l, *meta))