summaryrefslogtreecommitdiff
path: root/src/cat/LuaScriptInterface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cat/LuaScriptInterface.cpp')
-rw-r--r--src/cat/LuaScriptInterface.cpp133
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