package org.openautonomousconnection.luascript.tables;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs;
import org.luaj.vm2.lib.VarArgFunction;
import org.luaj.vm2.lib.ZeroArgFunction;
import org.openautonomousconnection.luascript.hosts.HostServices;
import org.openautonomousconnection.luascript.hosts.VideoHost;
import org.openautonomousconnection.luascript.utils.ScriptTable;
import java.io.File;
/**
* Lua table: video
*
*
Functions:
*
* - video.play(pathOrUrl)
* - video.pause()
* - video.resume()
* - video.stop()
* - video.hide()
* - video.rect(x, y, w, h)
* - video.volume(v)
* - video.loop(boolean)
* - video.seek(seconds)
*
*/
public final class VideoTable extends ScriptTable {
public VideoTable() {
super("video");
}
@Override
protected void define(HostServices services) {
VideoHost host = services.video()
.orElseThrow(() -> new IllegalStateException("VideoHost not provided"));
table().set("play", new VarArgFunction() {
@Override
public Varargs invoke(Varargs args) {
String src = args.arg(1).checkjstring();
if (looksLikeUrl(src)) host.playUrl(src);
else host.playFile(new File(src));
return LuaValue.NIL;
}
});
table().set("pause", new ZeroArgFunction() {
@Override
public LuaValue call() {
host.pause();
return LuaValue.NIL;
}
});
table().set("resume", new ZeroArgFunction() {
@Override
public LuaValue call() {
host.resume();
return LuaValue.NIL;
}
});
table().set("stop", new ZeroArgFunction() {
@Override
public LuaValue call() {
host.stop();
return LuaValue.NIL;
}
});
table().set("hide", new ZeroArgFunction() {
@Override
public LuaValue call() {
host.hide();
return LuaValue.NIL;
}
});
table().set("rect", new VarArgFunction() {
@Override
public Varargs invoke(Varargs args) {
double x = args.arg(1).checkdouble();
double y = args.arg(2).checkdouble();
double w = args.arg(3).checkdouble();
double h = args.arg(4).checkdouble();
host.setRect(x, y, w, h);
return LuaValue.NIL;
}
});
table().set("volume", new VarArgFunction() {
@Override
public Varargs invoke(Varargs args) {
double v = args.arg(1).checkdouble();
host.setVolume(v);
return LuaValue.NIL;
}
});
table().set("loop", new VarArgFunction() {
@Override
public Varargs invoke(Varargs args) {
boolean b = args.arg(1).checkboolean();
host.setLoop(b);
return LuaValue.NIL;
}
});
table().set("seek", new VarArgFunction() {
@Override
public Varargs invoke(Varargs args) {
double s = args.arg(1).checkdouble();
host.seek(s);
return LuaValue.NIL;
}
});
}
private static boolean looksLikeUrl(String s) {
if (s == null) return false;
int idx = s.indexOf("://");
return idx > 0 && idx < 16;
}
}