make tpt.selected* and tpt.brushx/y writable (replaces simstate branch)
This commit is contained in:
parent
5ab1aa6989
commit
f8782338d7
@ -351,6 +351,12 @@ void GameController::AdjustBrushSize(int direction, bool logarithmic, bool xAxis
|
|||||||
BrushChanged(gameModel->GetBrushID(), gameModel->GetBrush()->GetRadius().X, gameModel->GetBrush()->GetRadius().Y);
|
BrushChanged(gameModel->GetBrushID(), gameModel->GetBrush()->GetRadius().X, gameModel->GetBrush()->GetRadius().Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameController::SetBrushSize(ui::Point newSize)
|
||||||
|
{
|
||||||
|
gameModel->GetBrush()->SetRadius(newSize);
|
||||||
|
BrushChanged(gameModel->GetBrushID(), gameModel->GetBrush()->GetRadius().X, gameModel->GetBrush()->GetRadius().Y);
|
||||||
|
}
|
||||||
|
|
||||||
void GameController::AdjustZoomSize(int direction, bool logarithmic)
|
void GameController::AdjustZoomSize(int direction, bool logarithmic)
|
||||||
{
|
{
|
||||||
int newSize;
|
int newSize;
|
||||||
|
@ -81,6 +81,7 @@ public:
|
|||||||
void SetZoomEnabled(bool zoomEnable);
|
void SetZoomEnabled(bool zoomEnable);
|
||||||
void SetZoomPosition(ui::Point position);
|
void SetZoomPosition(ui::Point position);
|
||||||
void AdjustBrushSize(int direction, bool logarithmic = false, bool xAxis = false, bool yAxis = false);
|
void AdjustBrushSize(int direction, bool logarithmic = false, bool xAxis = false, bool yAxis = false);
|
||||||
|
void SetBrushSize(ui::Point newSize);
|
||||||
void AdjustZoomSize(int direction, bool logarithmic = false);
|
void AdjustZoomSize(int direction, bool logarithmic = false);
|
||||||
void ToolClick(int toolSelection, ui::Point point);
|
void ToolClick(int toolSelection, ui::Point point);
|
||||||
void DrawPoints(int toolSelection, queue<ui::Point> & pointQueue);
|
void DrawPoints(int toolSelection, queue<ui::Point> & pointQueue);
|
||||||
|
@ -588,26 +588,14 @@ int luacon_mouseevent(int mx, int my, int mb, int event, int mouse_wheel)
|
|||||||
return mpcontinue;
|
return mpcontinue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int luacon_step(int mx, int my, std::string selectl, std::string selectr, std::string selectalt, std::string selectreplace, int bsx, int bsy)
|
int luacon_step(int mx, int my)
|
||||||
{
|
{
|
||||||
int i, j, callret;
|
int i, j, callret;
|
||||||
lua_State* l=luacon_ci->l;
|
lua_State* l=luacon_ci->l;
|
||||||
lua_pushinteger(l, bsy);
|
|
||||||
lua_pushinteger(l, bsx);
|
|
||||||
lua_pushstring(l, selectreplace.c_str());
|
|
||||||
lua_pushstring(l, selectalt.c_str());
|
|
||||||
lua_pushstring(l, selectr.c_str());
|
|
||||||
lua_pushstring(l, selectl.c_str());
|
|
||||||
lua_pushinteger(l, my);
|
lua_pushinteger(l, my);
|
||||||
lua_pushinteger(l, mx);
|
lua_pushinteger(l, mx);
|
||||||
lua_setfield(l, tptProperties, "mousex");
|
lua_setfield(l, tptProperties, "mousex");
|
||||||
lua_setfield(l, tptProperties, "mousey");
|
lua_setfield(l, tptProperties, "mousey");
|
||||||
lua_setfield(l, tptProperties, "selectedl");
|
|
||||||
lua_setfield(l, tptProperties, "selectedr");
|
|
||||||
lua_setfield(l, tptProperties, "selecteda");
|
|
||||||
lua_setfield(l, tptProperties, "selectedreplace");
|
|
||||||
lua_setfield(l, tptProperties, "brushx");
|
|
||||||
lua_setfield(l, tptProperties, "brushy");
|
|
||||||
lua_pushstring(l, "stepfunctions");
|
lua_pushstring(l, "stepfunctions");
|
||||||
lua_rawget(l, LUA_REGISTRYINDEX);
|
lua_rawget(l, LUA_REGISTRYINDEX);
|
||||||
if(!lua_istable(l, -1))
|
if(!lua_istable(l, -1))
|
||||||
|
@ -21,7 +21,7 @@ extern int tptElements; //Table for TPT element names
|
|||||||
extern int tptParts, tptPartsMeta, tptElementTransitions, tptPartsCData, tptPartMeta, tptPart, cIndex;
|
extern int tptParts, tptPartsMeta, tptElementTransitions, tptPartsCData, tptPartMeta, tptPart, cIndex;
|
||||||
|
|
||||||
void luacon_hook(lua_State *L, lua_Debug *ar);
|
void luacon_hook(lua_State *L, lua_Debug *ar);
|
||||||
int luacon_step(int mx, int my, std::string , std::string selectr, std::string selectedalt, std::string selectedreplace, int bsx, int bsy);
|
int luacon_step(int mx, int my);
|
||||||
int luacon_mouseevent(int mx, int my, int mb, int event, int mouse_wheel);
|
int luacon_mouseevent(int mx, int my, int mb, int event, int mouse_wheel);
|
||||||
int luacon_keyevent(int key, int modifier, int event);
|
int luacon_keyevent(int key, int modifier, int event);
|
||||||
int luacon_eval(const char *command);
|
int luacon_eval(const char *command);
|
||||||
|
@ -73,6 +73,18 @@ int atPanic(lua_State *l)
|
|||||||
throw std::runtime_error("Unprotected lua panic: " + std::string(lua_tostring(l, -1)));
|
throw std::runtime_error("Unprotected lua panic: " + std::string(lua_tostring(l, -1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TptIndexClosure(lua_State *l)
|
||||||
|
{
|
||||||
|
LuaScriptInterface *lsi = (LuaScriptInterface *)lua_touserdata(l, lua_upvalueindex(1));
|
||||||
|
return lsi->tpt_index(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
int TptNewindexClosure(lua_State *l)
|
||||||
|
{
|
||||||
|
LuaScriptInterface *lsi = (LuaScriptInterface *)lua_touserdata(l, lua_upvalueindex(1));
|
||||||
|
return lsi->tpt_newIndex(l);
|
||||||
|
}
|
||||||
|
|
||||||
LuaScriptInterface::LuaScriptInterface(GameController * c, GameModel * m):
|
LuaScriptInterface::LuaScriptInterface(GameController * c, GameModel * m):
|
||||||
CommandInterface(c, m),
|
CommandInterface(c, m),
|
||||||
currentCommand(false),
|
currentCommand(false),
|
||||||
@ -214,14 +226,6 @@ LuaScriptInterface::LuaScriptInterface(GameController * c, GameModel * m):
|
|||||||
lua_setfield(l, tptProperties, "mousex");
|
lua_setfield(l, tptProperties, "mousex");
|
||||||
lua_pushinteger(l, 0);
|
lua_pushinteger(l, 0);
|
||||||
lua_setfield(l, tptProperties, "mousey");
|
lua_setfield(l, tptProperties, "mousey");
|
||||||
lua_pushstring(l, "DEFAULT_PT_DUST");
|
|
||||||
lua_setfield(l, tptProperties, "selectedl");
|
|
||||||
lua_pushstring(l, "DEFAULT_PT_NONE");
|
|
||||||
lua_setfield(l, tptProperties, "selectedr");
|
|
||||||
lua_pushstring(l, "DEFAULT_PT_NONE");
|
|
||||||
lua_setfield(l, tptProperties, "selecteda");
|
|
||||||
lua_pushstring(l, "DEFAULT_PT_NONE");
|
|
||||||
lua_setfield(l, tptProperties, "selectedreplace");
|
|
||||||
|
|
||||||
lua_newtable(l);
|
lua_newtable(l);
|
||||||
tptPropertiesVersion = lua_gettop(l);
|
tptPropertiesVersion = lua_gettop(l);
|
||||||
@ -332,6 +336,16 @@ tpt.partsdata = nil");
|
|||||||
lua_gr_func[i] = 0;
|
lua_gr_func[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//make tpt.* a metatable
|
||||||
|
lua_newtable(l);
|
||||||
|
lua_pushlightuserdata(l, this);
|
||||||
|
lua_pushcclosure(l, TptIndexClosure, 1);
|
||||||
|
lua_setfield(l, -2, "__index");
|
||||||
|
lua_pushlightuserdata(l, this);
|
||||||
|
lua_pushcclosure(l, TptNewindexClosure, 1);
|
||||||
|
lua_setfield(l, -2, "__newindex");
|
||||||
|
lua_setmetatable(l, -2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LuaScriptInterface::Init()
|
void LuaScriptInterface::Init()
|
||||||
@ -351,6 +365,79 @@ void LuaScriptInterface::SetWindow(ui::Window * window)
|
|||||||
Window = window;
|
Window = window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::tpt_index(lua_State *l)
|
||||||
|
{
|
||||||
|
std::string key = luaL_checkstring(l, 2);
|
||||||
|
if (!key.compare("selectedl"))
|
||||||
|
return lua_pushstring(l, luacon_selectedl.c_str()), 1;
|
||||||
|
if (!key.compare("selectedr"))
|
||||||
|
return lua_pushstring(l, luacon_selectedr.c_str()), 1;
|
||||||
|
if (!key.compare("selecteda"))
|
||||||
|
return lua_pushstring(l, luacon_selectedalt.c_str()), 1;
|
||||||
|
if (!key.compare("selectedreplace"))
|
||||||
|
return lua_pushstring(l, luacon_selectedreplace.c_str()), 1;
|
||||||
|
if (!key.compare("brushx"))
|
||||||
|
return lua_pushnumber(l, luacon_brushx), 1;
|
||||||
|
if (!key.compare("brushy"))
|
||||||
|
return lua_pushnumber(l, luacon_brushy), 1;
|
||||||
|
if (!key.compare("brushID"))
|
||||||
|
return lua_pushnumber(l, m->GetBrushID()), 1;
|
||||||
|
|
||||||
|
//if not a special key, return the value in the table
|
||||||
|
return lua_rawget(l, 1), 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::tpt_newIndex(lua_State *l)
|
||||||
|
{
|
||||||
|
std::string key = luaL_checkstring(l, 2);
|
||||||
|
if (!key.compare("selectedl"))
|
||||||
|
{
|
||||||
|
Tool *t = m->GetToolFromIdentifier(luaL_checkstring(l, 3));
|
||||||
|
if (t)
|
||||||
|
c->SetActiveTool(0, t);
|
||||||
|
else
|
||||||
|
luaL_error(l, "Invalid tool identifier: %s", lua_tostring(l, 3));
|
||||||
|
}
|
||||||
|
else if (!key.compare("selectedr"))
|
||||||
|
{
|
||||||
|
Tool *t = m->GetToolFromIdentifier(luaL_checkstring(l, 3));
|
||||||
|
if (t)
|
||||||
|
c->SetActiveTool(1, t);
|
||||||
|
else
|
||||||
|
luaL_error(l, "Invalid tool identifier: %s", lua_tostring(l, 3));
|
||||||
|
}
|
||||||
|
else if (!key.compare("selecteda"))
|
||||||
|
{
|
||||||
|
Tool *t = m->GetToolFromIdentifier(luaL_checkstring(l, 3));
|
||||||
|
if (t)
|
||||||
|
c->SetActiveTool(2, t);
|
||||||
|
else
|
||||||
|
luaL_error(l, "Invalid tool identifier: %s", lua_tostring(l, 3));
|
||||||
|
}
|
||||||
|
else if (!key.compare("selectedreplace"))
|
||||||
|
{
|
||||||
|
Tool *t = m->GetToolFromIdentifier(luaL_checkstring(l, 3));
|
||||||
|
if( t)
|
||||||
|
c->SetActiveTool(3, t);
|
||||||
|
else
|
||||||
|
luaL_error(l, "Invalid tool identifier: %s", lua_tostring(l, 3));
|
||||||
|
}
|
||||||
|
else if (!key.compare("brushx"))
|
||||||
|
c->SetBrushSize(ui::Point(luaL_checkinteger(l, 3), luacon_brushy));
|
||||||
|
else if (!key.compare("brushy"))
|
||||||
|
c->SetBrushSize(ui::Point(luacon_brushx, luaL_checkinteger(l, 3)));
|
||||||
|
else if (!key.compare("brushID"))
|
||||||
|
{
|
||||||
|
m->SetBrushID(luaL_checkinteger(l, 3));
|
||||||
|
c->BrushChanged(m->GetBrushID(), luacon_brushx, luacon_brushy);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//if not a special key, set a value in the table
|
||||||
|
return lua_rawset(l, 1), 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//// Begin Interface API
|
//// Begin Interface API
|
||||||
|
|
||||||
void LuaScriptInterface::initInterfaceAPI()
|
void LuaScriptInterface::initInterfaceAPI()
|
||||||
@ -2906,7 +2993,7 @@ void LuaScriptInterface::OnTick()
|
|||||||
ui::Engine::Ref().LastTick(gettime());
|
ui::Engine::Ref().LastTick(gettime());
|
||||||
if(luacon_mousedown)
|
if(luacon_mousedown)
|
||||||
luacon_mouseevent(luacon_mousex, luacon_mousey, luacon_mousebutton, LUACON_MPRESS, 0);
|
luacon_mouseevent(luacon_mousex, luacon_mousey, luacon_mousebutton, LUACON_MPRESS, 0);
|
||||||
luacon_step(luacon_mousex, luacon_mousey, luacon_selectedl, luacon_selectedr, luacon_selectedalt, luacon_selectedreplace, luacon_brushx, luacon_brushy);
|
luacon_step(luacon_mousex, luacon_mousey);
|
||||||
}
|
}
|
||||||
|
|
||||||
int LuaScriptInterface::Command(std::string command)
|
int LuaScriptInterface::Command(std::string command)
|
||||||
|
@ -146,6 +146,9 @@ class LuaScriptInterface: public CommandInterface
|
|||||||
static int fileSystem_copy(lua_State * l);
|
static int fileSystem_copy(lua_State * l);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
int tpt_index(lua_State *l);
|
||||||
|
int tpt_newIndex(lua_State *l);
|
||||||
|
|
||||||
ui::Window * Window;
|
ui::Window * Window;
|
||||||
lua_State *l;
|
lua_State *l;
|
||||||
LuaScriptInterface(GameController * c, GameModel * m);
|
LuaScriptInterface(GameController * c, GameModel * m);
|
||||||
|
@ -42,7 +42,7 @@ Element_RPEL::Element_RPEL()
|
|||||||
HighTemperature = ITH;
|
HighTemperature = ITH;
|
||||||
HighTemperatureTransition = NT;
|
HighTemperatureTransition = NT;
|
||||||
|
|
||||||
Update = &Element_REPL::update;
|
Update = &Element_RPEL::update;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user