]> git.lizzy.rs Git - hydra-dragonfire.git/blobdiff - convert/push_static.go
Add map component
[hydra-dragonfire.git] / convert / push_static.go
index 4eb7cb07e556f22d489d27a06f52669987f10b6d..75001a7f75e67a2f0203c5e946a969ae7e9e6042 100644 (file)
@@ -8,14 +8,14 @@ import (
 
 //go:generate ./push_mkauto.lua
 
-func vec2(l *lua.LState, val [2]lua.LNumber) {
+func CreateVec2(l *lua.LState, val [2]lua.LNumber) {
        l.Push(l.GetGlobal("vec2"))
        l.Push(val[0])
        l.Push(val[1])
        l.Call(2, 1)
 }
 
-func vec3(l *lua.LState, val [3]lua.LNumber) {
+func CreateVec3(l *lua.LState, val [3]lua.LNumber) {
        l.Push(l.GetGlobal("vec3"))
        l.Push(val[0])
        l.Push(val[1])
@@ -29,17 +29,17 @@ func popValue(l *lua.LState) lua.LValue {
        return ret
 }
 
-func pushVec2(l *lua.LState, val [2]lua.LNumber) lua.LValue {
-       vec2(l, val)
+func PushVec2(l *lua.LState, val [2]lua.LNumber) lua.LValue {
+       CreateVec2(l, val)
        return popValue(l)
 }
 
-func pushVec3(l *lua.LState, val [3]lua.LNumber) lua.LValue {
-       vec3(l, val)
+func PushVec3(l *lua.LState, val [3]lua.LNumber) lua.LValue {
+       CreateVec3(l, val)
        return popValue(l)
 }
 
-func pushBox1(l *lua.LState, val [2]lua.LNumber) lua.LValue {
+func PushBox1(l *lua.LState, val [2]lua.LNumber) lua.LValue {
        l.Push(l.GetGlobal("box"))
        l.Push(val[0])
        l.Push(val[1])
@@ -47,23 +47,23 @@ func pushBox1(l *lua.LState, val [2]lua.LNumber) lua.LValue {
        return popValue(l)
 }
 
-func pushBox2(l *lua.LState, val [2][2]lua.LNumber) lua.LValue {
+func PushBox2(l *lua.LState, val [2][2]lua.LNumber) lua.LValue {
        l.Push(l.GetGlobal("box"))
-       vec2(l, val[0])
-       vec2(l, val[1])
+       CreateVec2(l, val[0])
+       CreateVec2(l, val[1])
        l.Call(2, 1)
        return popValue(l)
 }
 
-func pushBox3(l *lua.LState, val [2][3]lua.LNumber) lua.LValue {
+func PushBox3(l *lua.LState, val [2][3]lua.LNumber) lua.LValue {
        l.Push(l.GetGlobal("box"))
-       vec3(l, val[0])
-       vec3(l, val[1])
+       CreateVec3(l, val[0])
+       CreateVec3(l, val[1])
        l.Call(2, 1)
        return popValue(l)
 }
 
-func pushColor(l *lua.LState, val color.NRGBA) lua.LValue {
+func PushColor(l *lua.LState, val color.NRGBA) lua.LValue {
        tbl := l.NewTable()
        l.SetField(tbl, "r", lua.LNumber(val.R))
        l.SetField(tbl, "g", lua.LNumber(val.G))
@@ -72,7 +72,7 @@ func pushColor(l *lua.LState, val color.NRGBA) lua.LValue {
        return tbl
 }
 
-func pushStringSet(l *lua.LState, val []string) lua.LValue {
+func PushStringSet(l *lua.LState, val []string) lua.LValue {
        tbl := l.NewTable()
        for _, str := range val {
                l.SetField(tbl, str, lua.LTrue)
@@ -80,7 +80,7 @@ func pushStringSet(l *lua.LState, val []string) lua.LValue {
        return tbl
 }
 
-func stringList[T ~string](l *lua.LState, val []T) lua.LValue {
+func PushStringList[T ~string](l *lua.LState, val []T) lua.LValue {
        tbl := l.NewTable()
        for _, s := range val {
                tbl.Append(lua.LString(s))
@@ -88,10 +88,96 @@ func stringList[T ~string](l *lua.LState, val []T) lua.LValue {
        return tbl
 }
 
-func pushStringList(l *lua.LState, val []string) lua.LValue {
-       return stringList[string](l, val)
+func Push4096[T uint8 | mt.Content](l *lua.LState, val [4096]T) lua.LValue {
+       tbl := l.NewTable()
+       for i, v := range val {
+               l.RawSetInt(tbl, i, lua.LNumber(v))
+       }
+       return tbl
+}
+
+func PushFields(l *lua.LState, val []mt.Field) lua.LValue {
+       tbl := l.NewTable()
+       for _, pair := range val {
+               l.SetField(tbl, pair.Name, lua.LString(pair.Value))
+       }
+       return tbl
+}
+
+func PushNodeMetaFields(l *lua.LState, val []mt.NodeMetaField) lua.LValue {
+       tbl := l.NewTable()
+       for _, pair := range val {
+               l.SetField(tbl, pair.Name, lua.LString(pair.Value))
+       }
+       return tbl
+}
+
+func PushInv(l *lua.LState, val mt.Inv) lua.LValue {
+       linv := l.NewTable()
+       for _, list := range val {
+               llist := l.NewTable()
+               l.SetField(llist, "width", lua.LNumber(list.Width))
+               for _, stack := range list.Stacks {
+                       lmeta := l.NewTable()
+                       l.SetField(lmeta, "fields", PushFields(l, stack.Fields()))
+                       if toolcaps, ok := stack.ToolCaps(); ok {
+                               l.SetField(lmeta, "tool_caps", PushToolCaps(l, toolcaps))
+                       }
+
+                       lstack := l.NewTable()
+                       l.SetField(lstack, "name", lua.LString(stack.Name))
+                       l.SetField(lstack, "count", lua.LNumber(stack.Count))
+                       l.SetField(lstack, "wear", lua.LNumber(stack.Wear))
+                       l.SetField(lstack, "meta", lmeta)
+
+                       llist.Append(lstack)
+               }
+               l.SetField(linv, list.Name, llist)
+       }
+       return linv
+}
+
+func PushNodeMetas(l *lua.LState, val map[uint16]*mt.NodeMeta) lua.LValue {
+       tbl := l.NewTable()
+       for i, meta := range val {
+               l.RawSetInt(tbl, int(i), PushNodeMeta(l, *meta))
+       }
+       return tbl
+}
+
+func PushChangedNodeMetas(l *lua.LState, val map[[3]int16]*mt.NodeMeta) lua.LValue {
+       lmetas := l.NewTable()
+       for pos, meta := range val {
+               lmeta := l.NewTable()
+               l.SetField(lmeta, "pos", PushVec3(l, [3]lua.LNumber{lua.LNumber(pos[0]), lua.LNumber(pos[1]), lua.LNumber(pos[2])}))
+               l.SetField(lmeta, "meta", PushNodeMeta(l, *meta))
+               lmetas.Append(lmeta)
+       }
+       return lmetas
 }
 
-func pushTextureList(l *lua.LState, val []mt.Texture) lua.LValue {
-       return stringList[mt.Texture](l, val)
+func PushGroups(l *lua.LState, val []mt.Group) lua.LValue {
+       tbl := l.NewTable()
+       for _, group := range val {
+               l.SetField(tbl, group.Name, lua.LNumber(group.Rating))
+       }
+       return tbl
+}
+
+func PushGroupCaps(l *lua.LState, val []mt.ToolGroupCap) lua.LValue {
+       lcaps := l.NewTable()
+       for _, groupcap := range val {
+               ltimes := l.NewTable()
+               for _, digtime := range groupcap.Times {
+                       l.RawSetInt(ltimes, int(digtime.Rating), lua.LNumber(digtime.Time))
+               }
+
+               lcap := l.NewTable()
+               l.SetField(lcap, "uses", lua.LNumber(groupcap.Uses))
+               l.SetField(lcap, "max_lvl", lua.LNumber(groupcap.MaxLvl))
+               l.SetField(lcap, "times", ltimes)
+
+               l.SetField(lcaps, groupcap.Name, lcap)
+       }
+       return lcaps
 }