diff options
| author | jacob1 <jfu614@gmail.com> | 2013-05-31 02:28:42 (GMT) |
|---|---|---|
| committer | jacob1 <jfu614@gmail.com> | 2013-05-31 02:28:42 (GMT) |
| commit | 80380bbaa39735e08d42f599bcb3968b5a1a1cd4 (patch) | |
| tree | 2e77e5cc2e4487eccb3e84c56b42234b38307d19 /src | |
| parent | 79e5b56c36e3b052d4eea76bb044e32837d0eff7 (diff) | |
| download | powder-80380bbaa39735e08d42f599bcb3968b5a1a1cd4.zip powder-80380bbaa39735e08d42f599bcb3968b5a1a1cd4.tar.gz | |
even more lua simulation api functions
Diffstat (limited to 'src')
| -rw-r--r-- | src/cat/LuaScriptInterface.cpp | 92 | ||||
| -rw-r--r-- | src/cat/LuaScriptInterface.h | 5 | ||||
| -rw-r--r-- | src/simulation/Air.cpp | 23 | ||||
| -rw-r--r-- | src/simulation/Air.h | 1 |
4 files changed, 105 insertions, 16 deletions
diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp index fcfa125..cea5e76 100644 --- a/src/cat/LuaScriptInterface.cpp +++ b/src/cat/LuaScriptInterface.cpp @@ -466,9 +466,12 @@ void LuaScriptInterface::initSimulationAPI() {"decoColor", simulation_decoColor}, {"decoColour", simulation_decoColor}, {"clearSim", simulation_clearSim}, + {"resetTemp", simulation_resetTemp}, + {"resetPressure", simulation_resetPressure}, {"saveStamp", simulation_saveStamp}, {"loadStamp", simulation_loadStamp}, {"loadSave", simulation_loadSave}, + {"getSaveID", simulation_getSaveID}, {"adjustCoords", simulation_adjustCoords}, {"prettyPowders", simulation_prettyPowders}, {"gravityGrid", simulation_gravityGrid}, @@ -477,6 +480,8 @@ void LuaScriptInterface::initSimulationAPI() {"airMode", simulation_airMode}, {"waterEqualisation", simulation_waterEqualisation}, {"waterEqualization", simulation_waterEqualisation}, + {"ambientAirTemp", simulation_ambientAirTemp}, + {"elementCount", simulation_elementCount}, {NULL, NULL} }; luaL_register(l, "simulation", simulationAPIMethods); @@ -1262,6 +1267,50 @@ int LuaScriptInterface::simulation_clearSim(lua_State * l) return 0; } +int LuaScriptInterface::simulation_resetTemp(lua_State * l) +{ + bool onlyConductors = luaL_optint(l, 1, 0); + for (int i = 0; i < luacon_sim->parts_lastActiveIndex; i++) + { + if (luacon_sim->parts[i].type && (luacon_sim->elements[luacon_sim->parts[i].type].HeatConduct || !onlyConductors)) + { + luacon_sim->parts[i].temp = luacon_sim->elements[luacon_sim->parts[i].type].Temperature; + } + } + return 0; +} + +int LuaScriptInterface::simulation_resetPressure(lua_State * l) +{ + int aCount = lua_gettop(l), width = XRES/CELL, height = YRES/CELL; + int x1 = abs(luaL_optint(l, 1, 0)); + int y1 = abs(luaL_optint(l, 2, 0)); + if (aCount > 2) + { + width = abs(luaL_optint(l, 3, XRES/CELL)); + height = abs(luaL_optint(l, 4, YRES/CELL)); + } + else if (aCount) + { + width = 1; + height = 1; + } + if(x1 > (XRES/CELL)-1) + x1 = (XRES/CELL)-1; + if(y1 > (YRES/CELL)-1) + y1 = (YRES/CELL)-1; + if(x1+width > (XRES/CELL)-1) + width = (XRES/CELL)-x1; + if(y1+height > (YRES/CELL)-1) + height = (YRES/CELL)-y1; + for (int nx = x1; nx<x1+width; nx++) + for (int ny = y1; ny<y1+height; ny++) + { + luacon_sim->air->pv[ny][nx] = 0; + } + return 0; +} + int LuaScriptInterface::simulation_saveStamp(lua_State * l) { int x = luaL_optint(l,1,0); @@ -1315,6 +1364,17 @@ int LuaScriptInterface::simulation_loadSave(lua_State * l) return 0; } +int LuaScriptInterface::simulation_getSaveID(lua_State *l) +{ + SaveInfo *tempSave = luacon_model->GetSave(); + if (tempSave) + { + lua_pushinteger(l, tempSave->GetID()); + return 1; + } + return 0; +} + int LuaScriptInterface::simulation_adjustCoords(lua_State * l) { int x = luaL_optint(l,1,0); @@ -1347,7 +1407,7 @@ int LuaScriptInterface::simulation_gravityGrid(lua_State * l) lua_pushnumber(l, luacon_model->GetGravityGrid()); return 1; } - int gravityGrid = luaL_optint(l, 1, -1); + int gravityGrid = luaL_optint(l, 1, 0); luacon_model->ShowGravityGrid(gravityGrid); luacon_model->UpdateQuickOptions(); return 0; @@ -1361,7 +1421,7 @@ int LuaScriptInterface::simulation_edgeMode(lua_State * l) lua_pushnumber(l, luacon_model->GetEdgeMode()); return 1; } - int edgeMode = luaL_optint(l, 1, -1); + int edgeMode = luaL_optint(l, 1, 0); luacon_model->SetEdgeMode(edgeMode); return 0; } @@ -1374,7 +1434,7 @@ int LuaScriptInterface::simulation_gravityMode(lua_State * l) lua_pushnumber(l, luacon_sim->gravityMode); return 1; } - int gravityMode = luaL_optint(l, 1, -1); + int gravityMode = luaL_optint(l, 1, 0); luacon_sim->gravityMode = gravityMode; return 0; } @@ -1387,7 +1447,7 @@ int LuaScriptInterface::simulation_airMode(lua_State * l) lua_pushnumber(l, luacon_sim->air->airMode); return 1; } - int airMode = luaL_optint(l, 1, -1); + int airMode = luaL_optint(l, 1, 0); luacon_sim->air->airMode = airMode; return 0; } @@ -1400,11 +1460,33 @@ int LuaScriptInterface::simulation_waterEqualisation(lua_State * l) lua_pushnumber(l, luacon_sim->water_equal_test); return 1; } - int waterMode = luaL_optint(l, 1, -1); + int waterMode = luaL_optint(l, 1, 0); luacon_sim->water_equal_test = waterMode; return 0; } +int LuaScriptInterface::simulation_ambientAirTemp(lua_State * l) +{ + int acount = lua_gettop(l); + if (acount == 0) + { + lua_pushnumber(l, luacon_sim->air->ambientAirTemp); + return 1; + } + int ambientAirTemp = luaL_optint(l, 1, -1); + luacon_sim->air->ambientAirTemp = ambientAirTemp; + return 0; +} + +int LuaScriptInterface::simulation_elementCount(lua_State * l) +{ + int element = luaL_optint(l, 1, 0); + if (element < 0 || element >= PT_NUM) + return luaL_error(l, "Invalid element ID (%d)", element); + + lua_pushnumber(l, luacon_sim->elementCount[element]); + return 1; +} //// Begin Renderer API diff --git a/src/cat/LuaScriptInterface.h b/src/cat/LuaScriptInterface.h index 899ceb6..d8ad350 100644 --- a/src/cat/LuaScriptInterface.h +++ b/src/cat/LuaScriptInterface.h @@ -80,9 +80,12 @@ class LuaScriptInterface: public CommandInterface static int simulation_decoBox(lua_State * l); static int simulation_decoColor(lua_State * l); static int simulation_clearSim(lua_State * l); + static int simulation_resetTemp(lua_State * l); + static int simulation_resetPressure(lua_State * l); static int simulation_saveStamp(lua_State * l); static int simulation_loadStamp(lua_State * l); static int simulation_loadSave(lua_State * l); + static int simulation_getSaveID(lua_State * l); static int simulation_adjustCoords(lua_State * l); static int simulation_prettyPowders(lua_State * l); static int simulation_gravityGrid(lua_State * l); @@ -90,6 +93,8 @@ class LuaScriptInterface: public CommandInterface static int simulation_gravityMode(lua_State * l); static int simulation_airMode(lua_State * l); static int simulation_waterEqualisation(lua_State * l); + static int simulation_ambientAirTemp(lua_State * l); + static int simulation_elementCount(lua_State * l); //Renderer void initRendererAPI(); diff --git a/src/simulation/Air.cpp b/src/simulation/Air.cpp index b992388..59a5a9e 100644 --- a/src/simulation/Air.cpp +++ b/src/simulation/Air.cpp @@ -48,7 +48,7 @@ void Air::Clear() void Air::ClearAirH() { - std::fill(&hv[0][0], &hv[0][0]+((XRES/CELL)*(YRES/CELL)), 273.15f + 22.0f); + std::fill(&hv[0][0], &hv[0][0]+((XRES/CELL)*(YRES/CELL)), ambientAirTemp); } void Air::update_airh(void) @@ -57,19 +57,19 @@ void Air::update_airh(void) float odh, dh, dx, dy, f, tx, ty; for (i=0; i<YRES/CELL; i++) //reduces pressure/velocity on the edges every frame { - hv[i][0] = 295.15f; - hv[i][1] = 295.15f; - hv[i][XRES/CELL-3] = 295.15f; - hv[i][XRES/CELL-2] = 295.15f; - hv[i][XRES/CELL-1] = 295.15f; + hv[i][0] = ambientAirTemp; + hv[i][1] = ambientAirTemp; + hv[i][XRES/CELL-3] = ambientAirTemp; + hv[i][XRES/CELL-2] = ambientAirTemp; + hv[i][XRES/CELL-1] = ambientAirTemp; } for (i=0; i<XRES/CELL; i++) //reduces pressure/velocity on the edges every frame { - hv[0][i] = 295.15f; - hv[1][i] = 295.15f; - hv[YRES/CELL-3][i] = 295.15f; - hv[YRES/CELL-2][i] = 295.15f; - hv[YRES/CELL-1][i] = 295.15f; + hv[0][i] = ambientAirTemp; + hv[1][i] = ambientAirTemp; + hv[YRES/CELL-3][i] = ambientAirTemp; + hv[YRES/CELL-2][i] = ambientAirTemp; + hv[YRES/CELL-1][i] = ambientAirTemp; } for (y=0; y<YRES/CELL; y++) //update velocity and pressure { @@ -316,6 +316,7 @@ void Air::Invert() Air::Air(Simulation & simulation): airMode(0), + ambientAirTemp(295.15f), sim(simulation) { //Simulation should do this. diff --git a/src/simulation/Air.h b/src/simulation/Air.h index cad5606..0fc6b4f 100644 --- a/src/simulation/Air.h +++ b/src/simulation/Air.h @@ -9,6 +9,7 @@ class Air public: Simulation & sim; int airMode; + float ambientAirTemp; //Arrays from the simulation unsigned char (*bmap)[XRES/CELL]; unsigned char (*emap)[XRES/CELL]; |
