From 4ae6300717a10c7fa850b800f18a730aee1d3e07 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 5 Sep 2014 19:57:14 +0200 Subject: Internal code editor. Sound system. --- src/luascript.cc | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 93 insertions(+), 6 deletions(-) (limited to 'src/luascript.cc') diff --git a/src/luascript.cc b/src/luascript.cc index df607de..ecbed53 100644 --- a/src/luascript.cc +++ b/src/luascript.cc @@ -58,9 +58,9 @@ static int _forward(lua_State *L) Pracro::T_STRING, Pracro::T_END); */ - int x = lua_tonumber(L, lua_gettop(L)); + double x = lua_tonumber(L, lua_gettop(L)); - printf("forward %d\n", x); + printf("forward %f\n", x); lua_getglobal(L, GLOBAL_POINTER); LUAScript *lua = (LUAScript*)lua_touserdata(L, lua_gettop(L)); @@ -82,6 +82,33 @@ static int _forward(lua_State *L) return 0; } +static int _coord(lua_State *L) +{/* + Pracro::checkParameters(L, + Pracro::T_STRING, + Pracro::T_END); + */ + lua_getglobal(L, GLOBAL_POINTER); + LUAScript *lua = (LUAScript*)lua_touserdata(L, lua_gettop(L)); + + if(!lua) { + lua_pushstring(L, "No LUA pointer!"); + lua_error(L); + return 1; + } + + if(lua->lua_stop) { + printf("stopping...\n"); + lua_pushstring(L, "stop"); + lua_error(L); + } + + lua_pushnumber(L, lua->out->coordX()); + lua_pushnumber(L, lua->out->coordY()); + + return 2; +} + static int _loadpen(lua_State *L) {/* Pracro::checkParameters(L, @@ -211,9 +238,9 @@ static int _turn(lua_State *L) Pracro::T_STRING, Pracro::T_END); */ - int x = lua_tonumber(L, lua_gettop(L)); + double x = lua_tonumber(L, lua_gettop(L)); - printf("turn %d\n", x); + printf("turn %f\n", x); lua_getglobal(L, GLOBAL_POINTER); LUAScript *lua = (LUAScript*)lua_touserdata(L, lua_gettop(L)); @@ -235,6 +262,22 @@ static int _turn(lua_State *L) return 0; } +static int _playsound(lua_State *L) +{/* + Pracro::checkParameters(L, + Pracro::T_STRING, + Pracro::T_END); + */ + QString file = lua_tostring(L, lua_gettop(L)); + + lua_getglobal(L, GLOBAL_POINTER); + LUAScript *lua = (LUAScript*)lua_touserdata(L, lua_gettop(L)); + + lua->playSound(file); + + return 0; +} + static int _reset(lua_State *L) {/* Pracro::checkParameters(L, @@ -263,6 +306,36 @@ static int _reset(lua_State *L) return 0; } +void hook(lua_State *L, lua_Debug *ar) +{ + lua_getinfo(L, "Snl", ar); + + lua_getglobal(L, GLOBAL_POINTER); + LUAScript *lua = (LUAScript*)lua_touserdata(L, lua_gettop(L)); + + if(!lua) { + lua_pushstring(L, "No LUA pointer!"); + lua_error(L); + return; + } + + // printf("kaiman file: %s\n", lua->file.toStdString().c_str()); + + if(lua->file == QString(ar->short_src)) { + // printf(" ---- currentline: %d\n", ar->currentline); + lua->lineChange(ar->currentline); + qApp->processEvents(); + } + /* + printf("HOOK:\n"); + printf(" what: %s\n", ar->what); + printf(" name: %s\n", ar->name); + printf(" source: %s\n", ar->source); + printf(" short_src: %s\n", ar->short_src); + printf(" currentline: %d\n", ar->currentline); + */ +} + LUAScript::LUAScript(OutputWindow *o, QString f) { DEBUG(luascript, "LUAScript()\n"); @@ -281,6 +354,11 @@ LUAScript::~LUAScript() DEBUG(luascript, "~LUAScript()\n"); } +void LUAScript::lineChange(int lineno) +{ + emit lineChanged(lineno); +} + void LUAScript::init() throw(Exception) { @@ -298,13 +376,17 @@ void LUAScript::init() lua_setglobal(L, GLOBAL_POINTER); // Assign it to a global lua var. lua_register(L, "debug", _debug); - lua_register(L, "fremad", _forward); - lua_register(L, "drej", _turn); + lua_register(L, "forward", _forward); + lua_register(L, "turn", _turn); lua_register(L, "speed", _speed); lua_register(L, "scale", _scale); lua_register(L, "reset", _reset); lua_register(L, "colour", _colour); lua_register(L, "loadpen", _loadpen); + lua_register(L, "coord", _coord); + lua_register(L, "playsound", _playsound); + + lua_sethook(L, hook, LUA_MASKLINE, 0); } void LUAScript::cleanup() @@ -329,6 +411,11 @@ void LUAScript::run() printf("LUA Thread Stopped!\n"); } +void LUAScript::playSound(QString file) +{ + player.playFile(file); +} + void LUAScript::stopScript() { lua_stop = true; -- cgit v1.2.3