residentsleeper/scripting/event/event.go

43 lines
741 B
Go
Raw Permalink Normal View History

package event
import (
lua "github.com/yuin/gopher-lua"
luar "layeh.com/gopher-luar"
"meow.tf/residentsleeper/events"
"meow.tf/residentsleeper/scripting/eventloop"
)
func Loader(L *lua.LState) int {
// register functions to the table
mod := L.SetFuncs(L.NewTable(), exports)
// returns the module
L.Push(mod)
return 1
}
var exports = map[string]lua.LGFunction{
"on": onFunc,
}
func onFunc(L *lua.LState) int {
name := L.CheckString(1)
handler := L.CheckFunction(2)
loop := eventloop.FromState(L)
events.On(name, func(args ...interface{}) {
loop.RunOnLoop(func(L *lua.LState) {
L.Push(handler)
for _, arg := range args {
L.Push(luar.New(L, arg))
}
L.PCall(len(args), 0, handler)
})
})
return 0
}