summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacob1 <jfu614@gmail.com>2013-05-31 02:28:42 (GMT)
committer jacob1 <jfu614@gmail.com>2013-05-31 02:28:42 (GMT)
commit80380bbaa39735e08d42f599bcb3968b5a1a1cd4 (patch)
tree2e77e5cc2e4487eccb3e84c56b42234b38307d19 /src
parent79e5b56c36e3b052d4eea76bb044e32837d0eff7 (diff)
downloadpowder-80380bbaa39735e08d42f599bcb3968b5a1a1cd4.zip
powder-80380bbaa39735e08d42f599bcb3968b5a1a1cd4.tar.gz
even more lua simulation api functions
Diffstat (limited to 'src')
-rw-r--r--src/cat/LuaScriptInterface.cpp92
-rw-r--r--src/cat/LuaScriptInterface.h5
-rw-r--r--src/simulation/Air.cpp23
-rw-r--r--src/simulation/Air.h1
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];