Add more transition type checks and fix tpt.eltransition
Though I'm quite sure nobody actually cares about that table. It's been broken for a very long time. The PROP tool now properly calls part_change_type when type is being set.
This commit is contained in:
parent
97bde1111d
commit
07b0d52f90
@ -200,6 +200,7 @@ void PropertyWindow::SetProperty()
|
|||||||
}
|
}
|
||||||
tool->propOffset = properties[property->GetOption().second].Offset;
|
tool->propOffset = properties[property->GetOption().second].Offset;
|
||||||
tool->propType = properties[property->GetOption().second].Type;
|
tool->propType = properties[property->GetOption().second].Type;
|
||||||
|
tool->changeType = properties[property->GetOption().second].Name == "type";
|
||||||
} catch (const std::exception& ex) {
|
} catch (const std::exception& ex) {
|
||||||
new ErrorMessage("Could not set property", "Invalid value provided");
|
new ErrorMessage("Could not set property", "Invalid value provided");
|
||||||
return;
|
return;
|
||||||
@ -245,6 +246,13 @@ void PropertyTool::SetProperty(Simulation *sim, ui::Point position)
|
|||||||
i = sim->photons[position.Y][position.X];
|
i = sim->photons[position.Y][position.X];
|
||||||
if(!i)
|
if(!i)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (changeType)
|
||||||
|
{
|
||||||
|
sim->part_change_type(ID(i), sim->parts[ID(i)].x+0.5f, sim->parts[ID(i)].y+0.5f, propValue.Integer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (propType)
|
switch (propType)
|
||||||
{
|
{
|
||||||
case StructProperty::Float:
|
case StructProperty::Float:
|
||||||
|
@ -87,6 +87,7 @@ public:
|
|||||||
}
|
}
|
||||||
StructProperty::PropertyType propType;
|
StructProperty::PropertyType propType;
|
||||||
PropertyValue propValue;
|
PropertyValue propValue;
|
||||||
|
bool changeType;
|
||||||
size_t propOffset;
|
size_t propOffset;
|
||||||
|
|
||||||
void OpenWindow(Simulation *sim);
|
void OpenWindow(Simulation *sim);
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#include "simulation/Simulation.h"
|
#include "simulation/Simulation.h"
|
||||||
#include "simulation/Gravity.h"
|
#include "simulation/Gravity.h"
|
||||||
#include "simulation/SimulationData.h"
|
#include "simulation/SimulationData.h"
|
||||||
|
#include "simulation/ElementCommon.h"
|
||||||
|
|
||||||
#include "graphics/Graphics.h"
|
#include "graphics/Graphics.h"
|
||||||
#include "graphics/Renderer.h"
|
#include "graphics/Renderer.h"
|
||||||
@ -165,11 +166,11 @@ int luacon_transitionread(lua_State* l)
|
|||||||
StructProperty prop = legacyTransitionNames[key];
|
StructProperty prop = legacyTransitionNames[key];
|
||||||
|
|
||||||
//Get Raw Index value for element
|
//Get Raw Index value for element
|
||||||
lua_pushstring(l, "value");
|
lua_pushstring(l, "id");
|
||||||
lua_rawget(l, 1);
|
lua_rawget(l, 1);
|
||||||
int i = lua_tointeger (l, lua_gettop(l));
|
int i = lua_tointeger (l, lua_gettop(l));
|
||||||
lua_pop(l, 1);
|
lua_pop(l, 1);
|
||||||
if (i < 0 || i >= PT_NUM)
|
if (!luacon_sim->IsValidElement(i))
|
||||||
{
|
{
|
||||||
return luaL_error(l, "Invalid index");
|
return luaL_error(l, "Invalid index");
|
||||||
}
|
}
|
||||||
@ -192,11 +193,20 @@ int luacon_transitionwrite(lua_State* l)
|
|||||||
lua_rawget(l, 1);
|
lua_rawget(l, 1);
|
||||||
int i = lua_tointeger (l, lua_gettop(l));
|
int i = lua_tointeger (l, lua_gettop(l));
|
||||||
lua_pop(l, 1);
|
lua_pop(l, 1);
|
||||||
if (i < 0 || i >= PT_NUM)
|
if (!luacon_sim->IsValidElement(i))
|
||||||
{
|
{
|
||||||
return luaL_error(l, "Invalid index");
|
return luaL_error(l, "Invalid index");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (prop.Type == StructProperty::TransitionType)
|
||||||
|
{
|
||||||
|
int type = luaL_checkinteger(l, 3);
|
||||||
|
if (!luacon_sim->IsValidElement(type) && type != NT && type != ST)
|
||||||
|
{
|
||||||
|
return luaL_error(l, "Invalid element");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
intptr_t propertyAddress = (intptr_t)(((unsigned char*)&luacon_sim->elements[i]) + prop.Offset);
|
intptr_t propertyAddress = (intptr_t)(((unsigned char*)&luacon_sim->elements[i]) + prop.Offset);
|
||||||
LuaScriptInterface::LuaSetProperty(l, prop, propertyAddress, 3);
|
LuaScriptInterface::LuaSetProperty(l, prop, propertyAddress, 3);
|
||||||
|
|
||||||
@ -215,7 +225,7 @@ int luacon_elementread(lua_State* l)
|
|||||||
lua_rawget(l, 1);
|
lua_rawget(l, 1);
|
||||||
int i = lua_tointeger (l, lua_gettop(l));
|
int i = lua_tointeger (l, lua_gettop(l));
|
||||||
lua_pop(l, 1);
|
lua_pop(l, 1);
|
||||||
if (i < 0 || i >= PT_NUM)
|
if (!luacon_sim->IsValidElement(i))
|
||||||
{
|
{
|
||||||
return luaL_error(l, "Invalid index");
|
return luaL_error(l, "Invalid index");
|
||||||
}
|
}
|
||||||
@ -238,13 +248,20 @@ int luacon_elementwrite(lua_State* l)
|
|||||||
lua_rawget(l, 1);
|
lua_rawget(l, 1);
|
||||||
int i = lua_tointeger (l, lua_gettop(l));
|
int i = lua_tointeger (l, lua_gettop(l));
|
||||||
lua_pop(l, 1);
|
lua_pop(l, 1);
|
||||||
if (i < 0 || i >= PT_NUM)
|
if (!luacon_sim->IsValidElement(i))
|
||||||
{
|
{
|
||||||
return luaL_error(l, "Invalid index");
|
return luaL_error(l, "Invalid index");
|
||||||
}
|
}
|
||||||
|
|
||||||
intptr_t propertyAddress = (intptr_t)(((unsigned char*)&luacon_sim->elements[i]) + prop.Offset);
|
if (prop.Name == "type") // i.e. it's .type
|
||||||
LuaScriptInterface::LuaSetProperty(l, prop, propertyAddress, 3);
|
{
|
||||||
|
luacon_sim->part_change_type(i, luacon_sim->parts[i].x+0.5f, luacon_sim->parts[i].y+0.5f, luaL_checkinteger(l, 3));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
intptr_t propertyAddress = (intptr_t)(((unsigned char*)&luacon_sim->elements[i]) + prop.Offset);
|
||||||
|
LuaScriptInterface::LuaSetProperty(l, prop, propertyAddress, 3);
|
||||||
|
}
|
||||||
|
|
||||||
luacon_model->BuildMenus();
|
luacon_model->BuildMenus();
|
||||||
luacon_sim->init_can_move();
|
luacon_sim->init_can_move();
|
||||||
@ -284,8 +301,10 @@ int luatpt_getelement(lua_State *l)
|
|||||||
if (lua_isnumber(l, 1))
|
if (lua_isnumber(l, 1))
|
||||||
{
|
{
|
||||||
t = luaL_optint(l, 1, 1);
|
t = luaL_optint(l, 1, 1);
|
||||||
if (t<0 || t>=PT_NUM)
|
if (!luacon_sim->IsValidElement(t))
|
||||||
|
{
|
||||||
return luaL_error(l, "Unrecognised element number '%d'", t);
|
return luaL_error(l, "Unrecognised element number '%d'", t);
|
||||||
|
}
|
||||||
lua_pushstring(l, luacon_sim->elements[t].Name.ToUtf8().c_str());
|
lua_pushstring(l, luacon_sim->elements[t].Name.ToUtf8().c_str());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -327,7 +346,7 @@ int luatpt_element_func(lua_State *l)
|
|||||||
{
|
{
|
||||||
int element = luaL_optint(l, 2, 0);
|
int element = luaL_optint(l, 2, 0);
|
||||||
int replace = luaL_optint(l, 3, 0);
|
int replace = luaL_optint(l, 3, 0);
|
||||||
if(element > 0 && element < PT_NUM)
|
if (luacon_sim->IsValidElement(element))
|
||||||
{
|
{
|
||||||
lua_el_func[element].Assign(1);
|
lua_el_func[element].Assign(1);
|
||||||
if (replace == 2)
|
if (replace == 2)
|
||||||
@ -346,7 +365,7 @@ int luatpt_element_func(lua_State *l)
|
|||||||
else if(lua_isnil(l, 1))
|
else if(lua_isnil(l, 1))
|
||||||
{
|
{
|
||||||
int element = luaL_optint(l, 2, 0);
|
int element = luaL_optint(l, 2, 0);
|
||||||
if(element > 0 && element < PT_NUM)
|
if (luacon_sim->IsValidElement(element))
|
||||||
{
|
{
|
||||||
lua_el_func[element].Clear();
|
lua_el_func[element].Clear();
|
||||||
lua_el_mode[element] = 0;
|
lua_el_mode[element] = 0;
|
||||||
@ -397,7 +416,7 @@ int luatpt_graphics_func(lua_State *l)
|
|||||||
if(lua_isfunction(l, 1))
|
if(lua_isfunction(l, 1))
|
||||||
{
|
{
|
||||||
int element = luaL_optint(l, 2, 0);
|
int element = luaL_optint(l, 2, 0);
|
||||||
if (element > 0 && element < PT_NUM)
|
if (luacon_sim->IsValidElement(element))
|
||||||
{
|
{
|
||||||
lua_gr_func[element].Assign(1);
|
lua_gr_func[element].Assign(1);
|
||||||
luacon_ren->graphicscache[element].isready = 0;
|
luacon_ren->graphicscache[element].isready = 0;
|
||||||
@ -411,7 +430,7 @@ int luatpt_graphics_func(lua_State *l)
|
|||||||
else if (lua_isnil(l, 1))
|
else if (lua_isnil(l, 1))
|
||||||
{
|
{
|
||||||
int element = luaL_optint(l, 2, 0);
|
int element = luaL_optint(l, 2, 0);
|
||||||
if (element > 0 && element < PT_NUM)
|
if (luacon_sim->IsValidElement(element))
|
||||||
{
|
{
|
||||||
lua_gr_func[element].Clear();
|
lua_gr_func[element].Clear();
|
||||||
luacon_ren->graphicscache[element].isready = 0;
|
luacon_ren->graphicscache[element].isready = 0;
|
||||||
@ -470,8 +489,10 @@ int luatpt_create(lua_State* l)
|
|||||||
if(lua_isnumber(l, 3))
|
if(lua_isnumber(l, 3))
|
||||||
{
|
{
|
||||||
t = luaL_optint(l, 3, 0);
|
t = luaL_optint(l, 3, 0);
|
||||||
if (t<0 || t >= PT_NUM || !luacon_sim->elements[t].Enabled)
|
if (!luacon_sim->IsValidElement(t))
|
||||||
|
{
|
||||||
return luaL_error(l, "Unrecognised element number '%d'", t);
|
return luaL_error(l, "Unrecognised element number '%d'", t);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
const char* name = luaL_optstring(l, 3, "dust");
|
const char* name = luaL_optstring(l, 3, "dust");
|
||||||
if ((t = luacon_sim->GetParticleType(ByteString(name))) == -1)
|
if ((t = luacon_sim->GetParticleType(ByteString(name))) == -1)
|
||||||
@ -698,7 +719,7 @@ int luatpt_set_property(lua_State* l)
|
|||||||
else
|
else
|
||||||
t = luaL_optint(l, 2, 0);
|
t = luaL_optint(l, 2, 0);
|
||||||
|
|
||||||
if (!strcmp(prop, "type") && (t<0 || t>=PT_NUM || !luacon_sim->elements[t].Enabled))
|
if (!strcmp(prop, "type") && !luacon_sim->IsValidElement(t))
|
||||||
return luaL_error(l, "Unrecognised element number '%d'", t);
|
return luaL_error(l, "Unrecognised element number '%d'", t);
|
||||||
}
|
}
|
||||||
else if (lua_isstring(l, 2))
|
else if (lua_isstring(l, 2))
|
||||||
|
@ -321,7 +321,7 @@ tpt.partsdata = nil");
|
|||||||
lua_newtable(l);
|
lua_newtable(l);
|
||||||
currentElementMeta = lua_gettop(l);
|
currentElementMeta = lua_gettop(l);
|
||||||
lua_pushinteger(l, i);
|
lua_pushinteger(l, i);
|
||||||
lua_setfield(l, currentElement, "value");
|
lua_setfield(l, currentElement, "id");
|
||||||
lua_pushcfunction(l, luacon_transitionwrite);
|
lua_pushcfunction(l, luacon_transitionwrite);
|
||||||
lua_setfield(l, currentElementMeta, "__newindex");
|
lua_setfield(l, currentElementMeta, "__newindex");
|
||||||
lua_pushcfunction(l, luacon_transitionread);
|
lua_pushcfunction(l, luacon_transitionread);
|
||||||
@ -2775,7 +2775,7 @@ int LuaScriptInterface::elements_property(lua_State * l)
|
|||||||
int type = luaL_checkinteger(l, 3);
|
int type = luaL_checkinteger(l, 3);
|
||||||
if (!luacon_sim->IsValidElement(type) && type != NT && type != ST)
|
if (!luacon_sim->IsValidElement(type) && type != NT && type != ST)
|
||||||
{
|
{
|
||||||
luaL_error(l, "Invalid element");
|
return luaL_error(l, "Invalid element");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user