package org.test;
import loon.Screen;
import loon.action.avg.drama.CommandLink;
import loon.action.avg.drama.IRocFunction;
import loon.action.avg.drama.RocFunctions;
import loon.action.avg.drama.RocSSprite;
import loon.action.avg.drama.RocScript;
import loon.action.sprite.SpriteLabel;
import loon.event.GameTouch;
import loon.opengl.GLEx;
import loon.utils.timer.LTimerContext;
public class RocScriptTest extends Screen {
@Override
public void draw(GLEx g) {
}
@Override
public void onLoad() {
add(MultiScreenTest.getBackButton(this,1));
// 以字符串方式,注入一组脚本命令
CommandLink command = new CommandLink();
command.line("print 'testing'");
command.line("wait 1000");
command.line("print 456");
command.line("print 789");
command.line("print testvar");
command.line("if testvar == 'ABCDEFG' then");
command.line("print 'abcdefg'");
command.line("else");
command.line("print 'gfedcba'");
command.line("end");
command.line("function xyz(x , y) begin");
command.line("for i = x, i < y, i + 1 begin");
command.line("println i");
command.line("end");
command.line("end");
command.line("xyz(5 , 8)");
command.line("print 'end'");
command.line("label(testing)");
command.line("wait 3000");
command.line("dellabel()");
command.line("function getNum(x) begin");
command.line("return (x + 1)");
command.line("end");
command.line("t = getNum(9)");
command.line("print t");
command.line("function hello() begin");
command.line("return \"Hello World!\"");
command.line("end");
command.line("println hello()");
command.line("print 'end'");
String cmd = command.toString();
// 构建脚本执行器,非文件模式载入(若为true,则表示注入的是文件目录)
RocSSprite sprite = new RocSSprite(cmd, false);
// 无限循环脚本
sprite.setLoopScript(true);
// 获得脚本执行器
RocScript script = sprite.getScript();
script.setDebug(false);
// 在脚本外部注入变量(循环模式下,每次循环会清空数据,所以此处注入仅有第一次运行脚本会生效)
script.addVar("testvar", "ABCDEFG");
// 获得脚本执行器的函数列表
RocFunctions funs = script.getFunctions();
final SpriteLabel label = new SpriteLabel("", 66, 66);
// 添加自定义函数,显示label
funs.add("label", new IRocFunction() {
@Override
public Object call(String[] value) {
label.setLabel(value[0]);
add(label);
return value;
}
});
// 自定义函数,删除label
funs.add("dellabel", new IRocFunction() {
@Override
public Object call(String[] value) {
remove(label);
return value;
}
});
add(sprite);
}
@Override
public void alter(LTimerContext timer) {
}
@Override
public void resize(int width, int height) {
}
@Override
public void touchDown(GameTouch e) {
}
@Override
public void touchUp(GameTouch e) {
}
@Override
public void touchMove(GameTouch e) {
}
@Override
public void touchDrag(GameTouch e) {
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void close() {
}
}