package org.openautonomousconnection.luascript.tables; import org.luaj.vm2.LuaFunction; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; import org.luaj.vm2.lib.*; import org.openautonomousconnection.luascript.events.JavaToLua; import org.openautonomousconnection.luascript.hosts.HostServices; import org.openautonomousconnection.luascript.hosts.ObserverHost; import org.openautonomousconnection.luascript.utils.ScriptTable; import java.util.Map; /** * Lua table: observers * *

Functions:

* */ public final class ObserversTable extends ScriptTable { public ObserversTable() { super("observers"); } @Override protected void define(HostServices services) { ObserverHost host = services.observers().orElseThrow(() -> new IllegalStateException("ObserverHost not provided")); table().set("on", new OneArgFunction() { @Override public LuaValue call(LuaValue fn) { LuaFunction cb = fn.checkfunction(); host.setCallback((type, targetId, data) -> { LuaValue luaData = JavaToLua.coerce(data); cb.call(LuaValue.valueOf(type), LuaValue.valueOf(targetId), luaData); }); return LuaValue.NIL; } }); table().set("mutationObserve", new VarArgFunction() { @Override public Varargs invoke(Varargs args) { String id = args.arg(1).checkjstring(); boolean subtree = args.arg(2).optboolean(false); boolean attributes = args.arg(3).optboolean(true); boolean childList = args.arg(4).optboolean(true); boolean characterData = args.arg(5).optboolean(false); host.observeMutations(id, subtree, attributes, childList, characterData); return LuaValue.NIL; } }); table().set("mutationUnobserve", new OneArgFunction() { @Override public LuaValue call(LuaValue id) { host.unobserveMutations(id.checkjstring()); return LuaValue.NIL; } }); table().set("resizeObserve", new OneArgFunction() { @Override public LuaValue call(LuaValue id) { host.observeResize(id.checkjstring()); return LuaValue.NIL; } }); table().set("resizeUnobserve", new OneArgFunction() { @Override public LuaValue call(LuaValue id) { host.unobserveResize(id.checkjstring()); return LuaValue.NIL; } }); table().set("intersectionObserve", new TwoArgFunction() { @Override public LuaValue call(LuaValue id, LuaValue threshold) { host.observeIntersection(id.checkjstring(), threshold.checkdouble()); return LuaValue.NIL; } }); table().set("intersectionUnobserve", new OneArgFunction() { @Override public LuaValue call(LuaValue id) { host.unobserveIntersection(id.checkjstring()); return LuaValue.NIL; } }); } }