diff options
Diffstat (limited to 'src/cat/LuaScriptInterface.cpp')
| -rw-r--r-- | src/cat/LuaScriptInterface.cpp | 133 |
1 files changed, 27 insertions, 106 deletions
diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp index d1319f7..d0b3b61 100644 --- a/src/cat/LuaScriptInterface.cpp +++ b/src/cat/LuaScriptInterface.cpp @@ -23,10 +23,6 @@ #include "client/HTTP.h" #include "PowderToy.h" -//#include "virtualmachine/VirtualMachine.h" -#include "pim/Parser.h" -#include "pim/Machine.h" - #include "LuaBit.h" #include "LuaWindow.h" @@ -118,7 +114,6 @@ LuaScriptInterface::LuaScriptInterface(GameController * c, GameModel * m): initInterfaceAPI(); initRendererAPI(); initElementsAPI(); - initVirtualMachineAPI(); initGraphicsAPI(); initFileSystemAPI(); @@ -484,6 +479,7 @@ void LuaScriptInterface::initSimulationAPI() {"waterEqualization", simulation_waterEqualisation}, {"ambientAirTemp", simulation_ambientAirTemp}, {"elementCount", simulation_elementCount}, + {"can_move", simulation_canMove}, {"parts", simulation_parts}, {"pmap", simulation_pmap}, {"neighbours", simulation_neighbours}, @@ -1235,13 +1231,11 @@ int LuaScriptInterface::simulation_decoBox(lua_State * l) int y1 = luaL_optint(l,2,-1); int x2 = luaL_optint(l,3,-1); int y2 = luaL_optint(l,4,-1); - int rx = luaL_optint(l,5,5); - int ry = luaL_optint(l,6,5); - int r = luaL_optint(l,7,255); - int g = luaL_optint(l,8,255); - int b = luaL_optint(l,9,255); - int a = luaL_optint(l,10,255); - int tool = luaL_optint(l,11,0); + int r = luaL_optint(l,5,255); + int g = luaL_optint(l,6,255); + int b = luaL_optint(l,7,255); + int a = luaL_optint(l,8,255); + int tool = luaL_optint(l,9,0); luacon_sim->ApplyDecorationBox(x1, y1, x2, y2, r, g, b, a, tool); return 0; @@ -1508,6 +1502,27 @@ int LuaScriptInterface::simulation_elementCount(lua_State * l) return 1; } +int LuaScriptInterface::simulation_canMove(lua_State * l) +{ + int movingElement = luaL_checkint(l, 1); + int destinationElement = luaL_checkint(l, 2); + if (movingElement < 0 || movingElement >= PT_NUM) + return luaL_error(l, "Invalid element ID (%d)", movingElement); + if (destinationElement < 0 || destinationElement >= PT_NUM) + return luaL_error(l, "Invalid element ID (%d)", destinationElement); + + if (lua_gettop(l) < 3) + { + lua_pushnumber(l, luacon_sim->can_move[movingElement][destinationElement]); + return 1; + } + else + { + luacon_sim->can_move[movingElement][destinationElement] = luaL_checkint(l, 3); + return 0; + } +} + int PartsClosure(lua_State * l) { int i = lua_tointeger(l, lua_upvalueindex(1)); @@ -1873,49 +1888,6 @@ void LuaScriptInterface::initElementsAPI() } } -pim::VirtualMachine * LuaScriptInterface::updateVirtualMachines[PT_NUM]; - -int LuaScriptInterface::updateVM(UPDATE_FUNC_ARGS) -{ - pim::VirtualMachine * machine = updateVirtualMachines[parts[i].type]; - - machine->CSPush(i); - machine->CSPush(x); - machine->CSPush(y); - machine->Call(0); - - - /*vm::VirtualMachine * vMachine = updateVirtualMachines[parts[i].type]; - - vm::word w; - int argAddr = 0, argCount = 5; - vMachine->sim = sim; - - vMachine->OpPUSH(w); //Pointless null in stack - w.int4 = (argCount + 2) * sizeof(vm::word); - vMachine->OpENTER(w); - argAddr = 8; - - //Arguments - w.int4 = i; vMachine->Marshal(argAddr, w); argAddr += 4; - w.int4 = x; vMachine->Marshal(argAddr, w); argAddr += 4; - w.int4 = y; vMachine->Marshal(argAddr, w); argAddr += 4; - w.int4 = nt; vMachine->Marshal(argAddr, w); argAddr += 4; - w.int4 = surround_space; vMachine->Marshal(argAddr, w); argAddr += 4; - - w.int4 = 0; - vMachine->Push(w); - - vMachine->OpCALL(w); - vMachine->Run(); - w.int4 = (argCount + 2) * sizeof(vm::word); - vMachine->OpLEAVE(w); - vMachine->OpPOP(w); //Pop pointless null - vMachine->End();*/ - - return 0; -} - int LuaScriptInterface::elements_loadDefault(lua_State * l) { int args = lua_gettop(l); @@ -2238,11 +2210,6 @@ int LuaScriptInterface::elements_property(lua_State * l) else lua_el_mode[id] = 1; } - else if(lua_type(l, 3) == LUA_TLIGHTUSERDATA) - { - updateVirtualMachines[id] = (pim::VirtualMachine*)lua_touserdata(l, 3); - luacon_sim->elements[id].Update = &updateVM; - } else if(lua_type(l, 3) == LUA_TBOOLEAN && !lua_toboolean(l, 3)) { lua_el_func[id] = 0; @@ -2347,52 +2314,6 @@ int LuaScriptInterface::elements_free(lua_State * l) return 0; } -void LuaScriptInterface::initVirtualMachineAPI() -{ - //Methods - struct luaL_reg vmAPIMethods [] = { - {"loadProgram", virtualMachine_loadProgram}, - {NULL, NULL} - }; - luaL_register(l, "virtualMachine", vmAPIMethods); - - //elem shortcut - lua_getglobal(l, "virtualMachine"); - lua_setglobal(l, "vm"); -} - -int LuaScriptInterface::virtualMachine_loadProgram(lua_State * l) -{ - /*luaL_checktype(l, 1, LUA_TSTRING); - - vm::VirtualMachine * newVM = new vm::VirtualMachine(1); - try - { - const char * tempString = lua_tostring(l, 1); - int tempStringLength = lua_strlen(l, 1); - std::vector<char> programData(tempString, tempString+tempStringLength); - newVM->LoadProgram(programData); - } - catch(std::exception & e) - { - return luaL_error(l, "Unable to load program"); - } - lua_pushlightuserdata(l, newVM);*/ - std::string programSource(lua_tostring(l, 1)); - std::stringstream input(programSource); - - - pim::compiler::Parser * parser = new pim::compiler::Parser(input); - - std::vector<unsigned char> programData = parser->Compile(); - - pim::VirtualMachine * machine = new pim::VirtualMachine(luacon_sim); - machine->LoadProgram(programData); - - lua_pushlightuserdata(l, machine); - return 1; -} - void LuaScriptInterface::initGraphicsAPI() { //Methods |
