4 "github.com/dragonfireclient/mt"
5 "github.com/yuin/gopher-lua"
9 //go:generate ./push_mkauto.lua
11 func CreateVec2(l *lua.LState, val [2]lua.LNumber) {
12 l.Push(l.GetGlobal("vec2"))
18 func CreateVec3(l *lua.LState, val [3]lua.LNumber) {
19 l.Push(l.GetGlobal("vec3"))
26 func popValue(l *lua.LState) lua.LValue {
32 func PushVec2(l *lua.LState, val [2]lua.LNumber) lua.LValue {
37 func PushVec3(l *lua.LState, val [3]lua.LNumber) lua.LValue {
42 func PushBox1(l *lua.LState, val [2]lua.LNumber) lua.LValue {
43 l.Push(l.GetGlobal("box"))
50 func PushBox2(l *lua.LState, val [2][2]lua.LNumber) lua.LValue {
51 l.Push(l.GetGlobal("box"))
58 func PushBox3(l *lua.LState, val [2][3]lua.LNumber) lua.LValue {
59 l.Push(l.GetGlobal("box"))
66 func PushColor(l *lua.LState, val color.NRGBA) lua.LValue {
68 l.SetField(tbl, "r", lua.LNumber(val.R))
69 l.SetField(tbl, "g", lua.LNumber(val.G))
70 l.SetField(tbl, "b", lua.LNumber(val.B))
71 l.SetField(tbl, "a", lua.LNumber(val.A))
75 func PushStringSet(l *lua.LState, val []string) lua.LValue {
77 for _, str := range val {
78 l.SetField(tbl, str, lua.LTrue)
83 func PushStringList[T ~string](l *lua.LState, val []T) lua.LValue {
85 for _, s := range val {
86 tbl.Append(lua.LString(s))
91 func Push4096[T uint8 | mt.Content](l *lua.LState, val [4096]T) lua.LValue {
93 for i, v := range val {
94 l.RawSetInt(tbl, i, lua.LNumber(v))
99 func PushFields(l *lua.LState, val []mt.Field) lua.LValue {
101 for _, pair := range val {
102 l.SetField(tbl, pair.Name, lua.LString(pair.Value))
107 func PushNodeMetaFields(l *lua.LState, val []mt.NodeMetaField) lua.LValue {
109 for _, pair := range val {
110 l.SetField(tbl, pair.Name, lua.LString(pair.Value))
115 func PushInv(l *lua.LState, val mt.Inv) lua.LValue {
117 for _, list := range val {
118 llist := l.NewTable()
119 l.SetField(llist, "width", lua.LNumber(list.Width))
120 for _, stack := range list.Stacks {
121 lmeta := l.NewTable()
122 l.SetField(lmeta, "fields", PushFields(l, stack.Fields()))
123 if toolcaps, ok := stack.ToolCaps(); ok {
124 l.SetField(lmeta, "tool_caps", PushToolCaps(l, toolcaps))
127 lstack := l.NewTable()
128 l.SetField(lstack, "name", lua.LString(stack.Name))
129 l.SetField(lstack, "count", lua.LNumber(stack.Count))
130 l.SetField(lstack, "wear", lua.LNumber(stack.Wear))
131 l.SetField(lstack, "meta", lmeta)
135 l.SetField(linv, list.Name, llist)
140 func PushNodeMetas(l *lua.LState, val map[uint16]*mt.NodeMeta) lua.LValue {
142 for i, meta := range val {
143 l.RawSetInt(tbl, int(i), PushNodeMeta(l, *meta))
148 func PushChangedNodeMetas(l *lua.LState, val map[[3]int16]*mt.NodeMeta) lua.LValue {
149 lmetas := l.NewTable()
150 for pos, meta := range val {
151 lmeta := l.NewTable()
152 l.SetField(lmeta, "pos", PushVec3(l, [3]lua.LNumber{lua.LNumber(pos[0]), lua.LNumber(pos[1]), lua.LNumber(pos[2])}))
153 l.SetField(lmeta, "meta", PushNodeMeta(l, *meta))
159 func PushGroups(l *lua.LState, val []mt.Group) lua.LValue {
161 for _, group := range val {
162 l.SetField(tbl, group.Name, lua.LNumber(group.Rating))
167 func PushGroupCaps(l *lua.LState, val []mt.ToolGroupCap) lua.LValue {
168 lcaps := l.NewTable()
169 for _, groupcap := range val {
170 ltimes := l.NewTable()
171 for _, digtime := range groupcap.Times {
172 l.RawSetInt(ltimes, int(digtime.Rating), lua.LNumber(digtime.Time))
176 l.SetField(lcap, "uses", lua.LNumber(groupcap.Uses))
177 l.SetField(lcap, "max_lvl", lua.LNumber(groupcap.MaxLvl))
178 l.SetField(lcap, "times", ltimes)
180 l.SetField(lcaps, groupcap.Name, lcap)