core/curve with presets, keys, wraps; KindCurve in schema, scenes, prefabs and the inspector curve editor. modules/tween: tweens and timers in per-world pools, game and unscaled domains, script field targets via contracts/scriptfields. Host handle types (abi.Handle, bind.Handle, manifest v5), yield on awaitable handles via contracts/scriptwait. Script modules aego/curve, aego/tween, aego/timer; platformer enemy uses a cooldown and a fade-out tween. Docs: tween.md, curves.md, language reference; golden for the curve editor.
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package bind
|
|
|
|
import (
|
|
"aego/script/abi"
|
|
"aego/script/vm"
|
|
)
|
|
|
|
func Func4[A, B, C, D, R any](m *Module, name string, f func(*Ctx, A, B, C, D) R, opts ...Option) {
|
|
ca, ea := codecOf[A](m.reg)
|
|
cb, eb := codecOf[B](m.reg)
|
|
cc, ec := codecOf[C](m.reg)
|
|
cd, ed := codecOf[D](m.reg)
|
|
cr, er := codecOf[R](m.reg)
|
|
if !m.valid(name, ea, eb, ec, ed, er) {
|
|
return
|
|
}
|
|
ob := ca.slots
|
|
oc := ob + cb.slots
|
|
od := oc + cc.slots
|
|
m.add(name, []abi.TypeRef{ca.ref, cb.ref, cc.ref, cd.ref}, cr.ref, func(mc *vm.Machine, w []vm.Value) error {
|
|
x, err := ctxOf(mc)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
a, b, c, d := ca.get(mc, w), cb.get(mc, w[ob:]), cc.get(mc, w[oc:]), cd.get(mc, w[od:])
|
|
cr.put(mc, w, f(x, a, b, c, d))
|
|
return x.finish()
|
|
}, opts)
|
|
}
|
|
|
|
func Func5[A, B, C, D, E, R any](m *Module, name string, f func(*Ctx, A, B, C, D, E) R, opts ...Option) {
|
|
ca, ea := codecOf[A](m.reg)
|
|
cb, eb := codecOf[B](m.reg)
|
|
cc, ec := codecOf[C](m.reg)
|
|
cd, ed := codecOf[D](m.reg)
|
|
ce, ee := codecOf[E](m.reg)
|
|
cr, er := codecOf[R](m.reg)
|
|
if !m.valid(name, ea, eb, ec, ed, ee, er) {
|
|
return
|
|
}
|
|
ob := ca.slots
|
|
oc := ob + cb.slots
|
|
od := oc + cc.slots
|
|
oe := od + cd.slots
|
|
m.add(name, []abi.TypeRef{ca.ref, cb.ref, cc.ref, cd.ref, ce.ref}, cr.ref, func(mc *vm.Machine, w []vm.Value) error {
|
|
x, err := ctxOf(mc)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
a, b, c := ca.get(mc, w), cb.get(mc, w[ob:]), cc.get(mc, w[oc:])
|
|
d, e := cd.get(mc, w[od:]), ce.get(mc, w[oe:])
|
|
cr.put(mc, w, f(x, a, b, c, d, e))
|
|
return x.finish()
|
|
}, opts)
|
|
}
|