Add sim.brush (#350)
This commit is contained in:
parent
3a3254f38b
commit
57f5d0f84f
@ -741,6 +741,7 @@ void LuaScriptInterface::initSimulationAPI()
|
|||||||
{"ambientAirTemp", simulation_ambientAirTemp},
|
{"ambientAirTemp", simulation_ambientAirTemp},
|
||||||
{"elementCount", simulation_elementCount},
|
{"elementCount", simulation_elementCount},
|
||||||
{"can_move", simulation_canMove},
|
{"can_move", simulation_canMove},
|
||||||
|
{"brush", simulation_brush},
|
||||||
{"parts", simulation_parts},
|
{"parts", simulation_parts},
|
||||||
{"pmap", simulation_pmap},
|
{"pmap", simulation_pmap},
|
||||||
{"photons", simulation_photons},
|
{"photons", simulation_photons},
|
||||||
@ -1903,6 +1904,76 @@ int LuaScriptInterface::simulation_parts(lua_State * l)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int BrushClosure(lua_State * l)
|
||||||
|
{
|
||||||
|
// see Simulation::ToolBrush
|
||||||
|
int positionX = lua_tointeger(l, lua_upvalueindex(1));
|
||||||
|
int positionY = lua_tointeger(l, lua_upvalueindex(2));
|
||||||
|
int radiusX = lua_tointeger(l, lua_upvalueindex(3));
|
||||||
|
int radiusY = lua_tointeger(l, lua_upvalueindex(4));
|
||||||
|
int sizeX = lua_tointeger(l, lua_upvalueindex(5));
|
||||||
|
int sizeY = lua_tointeger(l, lua_upvalueindex(6));
|
||||||
|
int x = lua_tointeger(l, lua_upvalueindex(7));
|
||||||
|
int y = lua_tointeger(l, lua_upvalueindex(8));
|
||||||
|
float strength = lua_tonumber(l, lua_upvalueindex(9));
|
||||||
|
unsigned char *bitmap = (unsigned char *)lua_touserdata(l, lua_upvalueindex(10));
|
||||||
|
|
||||||
|
|
||||||
|
int yield_x, yield_y;
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (!(y < sizeY)) return 0;
|
||||||
|
if (x < sizeX)
|
||||||
|
{
|
||||||
|
bool yield_coords = false;
|
||||||
|
if(bitmap[(y*sizeX)+x] && (positionX+(x-radiusX) >= 0 && positionY+(y-radiusY) >= 0 && positionX+(x-radiusX) < XRES && positionY+(y-radiusY) < YRES))
|
||||||
|
{
|
||||||
|
yield_coords = true;
|
||||||
|
yield_x = positionX+(x-radiusX);
|
||||||
|
yield_y = positionY+(y-radiusY);
|
||||||
|
}
|
||||||
|
x++;
|
||||||
|
if (yield_coords) break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x = 0;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_pushnumber(l, x);
|
||||||
|
lua_replace(l, lua_upvalueindex(7));
|
||||||
|
lua_pushnumber(l, y);
|
||||||
|
lua_replace(l, lua_upvalueindex(8));
|
||||||
|
|
||||||
|
lua_pushnumber(l, yield_x);
|
||||||
|
lua_pushnumber(l, yield_y);
|
||||||
|
lua_pushnumber(l, strength);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_brush(lua_State * l)
|
||||||
|
{
|
||||||
|
// see Simulation::ToolBrush
|
||||||
|
int positionX = luaL_checkint(l, 1);
|
||||||
|
int positionY = luaL_checkint(l, 2);
|
||||||
|
Brush * cBrush = luacon_model->GetBrush();
|
||||||
|
int radiusX = cBrush->GetRadius().X, radiusY = cBrush->GetRadius().Y, sizeX = cBrush->GetSize().X, sizeY = cBrush->GetSize().Y;
|
||||||
|
lua_pushnumber(l, positionX);
|
||||||
|
lua_pushnumber(l, positionY);
|
||||||
|
lua_pushnumber(l, radiusX);
|
||||||
|
lua_pushnumber(l, radiusY);
|
||||||
|
lua_pushnumber(l, sizeX);
|
||||||
|
lua_pushnumber(l, sizeY);
|
||||||
|
lua_pushnumber(l, 0);
|
||||||
|
lua_pushnumber(l, 0);
|
||||||
|
lua_pushnumber(l, luacon_model->GetToolStrength());
|
||||||
|
lua_pushlightuserdata(l, cBrush->GetBitmap());
|
||||||
|
lua_pushcclosure(l, BrushClosure, 10);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int LuaScriptInterface::simulation_pmap(lua_State * l)
|
int LuaScriptInterface::simulation_pmap(lua_State * l)
|
||||||
{
|
{
|
||||||
int x = luaL_checkint(l, 1);
|
int x = luaL_checkint(l, 1);
|
||||||
|
@ -102,6 +102,7 @@ class LuaScriptInterface: public CommandInterface
|
|||||||
static int simulation_elementCount(lua_State * l);
|
static int simulation_elementCount(lua_State * l);
|
||||||
static int simulation_canMove(lua_State * l);
|
static int simulation_canMove(lua_State * l);
|
||||||
static int simulation_parts(lua_State * l);
|
static int simulation_parts(lua_State * l);
|
||||||
|
static int simulation_brush(lua_State * l);
|
||||||
static int simulation_pmap(lua_State * l);
|
static int simulation_pmap(lua_State * l);
|
||||||
static int simulation_photons(lua_State * l);
|
static int simulation_photons(lua_State * l);
|
||||||
static int simulation_neighbours(lua_State * l);
|
static int simulation_neighbours(lua_State * l);
|
||||||
|
Loading…
Reference in New Issue
Block a user