4 "github.com/anon55555/mt"
5 "github.com/dragonfireclient/hydra-dragonfire/convert"
6 "github.com/yuin/gopher-lua"
12 blocks map[[3]int16]*mt.MapBlk
13 userdata *lua.LUserData
16 var mapFuncs = map[string]lua.LGFunction{
21 func getMap(l *lua.LState, idx int) *Map {
22 return l.CheckUserData(idx).Value.(*Map)
25 func newMap(l *lua.LState) *Map {
27 mp.blocks = map[[3]int16]*mt.MapBlk{}
28 mp.userdata = l.NewUserData()
29 mp.userdata.Value = mp
30 l.SetMetatable(mp.userdata, l.GetTypeMetatable("hydra.map"))
34 func (mp *Map) process(client *Client, pkt *mt.Pkt) {
35 switch cmd := pkt.Cmd.(type) {
36 case *mt.ToCltBlkData:
38 mp.blocks[cmd.Blkpos] = &cmd.Blk
40 client.conn.SendCmd(&mt.ToSrvGotBlks{Blks: [][3]int16{cmd.Blkpos}})
44 func l_map(l *lua.LState) int {
50 func l_map_block(l *lua.LState) int {
53 convert.ReadVec3Int16(l, l.Get(2), &blkpos)
58 block, ok := mp.blocks[blkpos]
60 l.Push(convert.PushMapBlk(l, *block))
68 func l_map_node(l *lua.LState) int {
72 convert.ReadVec3Int16(l, l.Get(2), &pos)
73 blkpos, i := mt.Pos2Blkpos(pos)
78 block, block_exists := mp.blocks[blkpos]
80 meta, meta_exists := block.NodeMetas[i]
86 l.SetField(lnode, "param0", lua.LNumber(block.Param0[i]))
87 l.SetField(lnode, "param1", lua.LNumber(block.Param1[i]))
88 l.SetField(lnode, "param2", lua.LNumber(block.Param2[i]))
89 l.SetField(lnode, "meta", convert.PushNodeMeta(l, *meta))