Files
LuaScript/src/main/java/org/openautonomousconnection/luascript/tables/GeometryTable.java
2026-02-28 17:39:42 +01:00

70 lines
2.2 KiB
Java

package org.openautonomousconnection.luascript.tables;
import org.luaj.vm2.LuaTable;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.OneArgFunction;
import org.luaj.vm2.lib.TwoArgFunction;
import org.luaj.vm2.lib.VarArgFunction;
import org.luaj.vm2.Varargs;
import org.openautonomousconnection.luascript.events.JavaToLua;
import org.openautonomousconnection.luascript.hosts.GeometryHost;
import org.openautonomousconnection.luascript.hosts.HostServices;
import org.openautonomousconnection.luascript.utils.ScriptTable;
import java.util.Map;
/**
* Lua table: geometry
*
* <p>Functions:</p>
* <ul>
* <li>geometry.rect(id) -> map</li>
* <li>geometry.viewport() -> map</li>
* <li>geometry.scrollTo(x,y)</li>
* <li>geometry.scrollIntoView(id, align?)</li>
* </ul>
*/
public final class GeometryTable extends ScriptTable {
public GeometryTable() {
super("geometry");
}
@Override
protected void define(HostServices services) {
GeometryHost host = services.geometry().orElseThrow(() -> new IllegalStateException("GeometryHost not provided"));
table().set("rect", new OneArgFunction() {
@Override
public LuaValue call(LuaValue id) {
Map<String, Object> m = host.getBoundingClientRect(id.checkjstring());
return JavaToLua.coerce(m);
}
});
table().set("viewport", new org.luaj.vm2.lib.ZeroArgFunction() {
@Override
public LuaValue call() {
return JavaToLua.coerce(host.getViewport());
}
});
table().set("scrollTo", new VarArgFunction() {
@Override
public Varargs invoke(Varargs args) {
host.scrollTo(args.arg(1).checkdouble(), args.arg(2).checkdouble());
return LuaValue.NIL;
}
});
table().set("scrollIntoView", new VarArgFunction() {
@Override
public Varargs invoke(Varargs args) {
String id = args.arg(1).checkjstring();
String align = args.narg() >= 2 && !args.arg(2).isnil() ? args.arg(2).tojstring() : null;
host.scrollIntoView(id, align);
return LuaValue.NIL;
}
});
}
}