Fix more bugs in the Lua API
Crash with sim.partKill(large number). sim.neighbours() looking for particles in completely the wrong place. Impossible to tell from sim.partID whether a particle exists, since it returns 0 both if there is no particle there and if particle 0 is there.
This commit is contained in:
parent
4152bb560e
commit
a5ea6555f1
@ -645,6 +645,9 @@ int LuaScriptInterface::simulation_partID(lua_State * l)
|
|||||||
int amalgam = luacon_sim->pmap[y][x];
|
int amalgam = luacon_sim->pmap[y][x];
|
||||||
if(!amalgam)
|
if(!amalgam)
|
||||||
amalgam = luacon_sim->photons[y][x];
|
amalgam = luacon_sim->photons[y][x];
|
||||||
|
if (!amalgam)
|
||||||
|
lua_pushnil(l);
|
||||||
|
else
|
||||||
lua_pushinteger(l, amalgam >> 8);
|
lua_pushinteger(l, amalgam >> 8);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -796,7 +799,11 @@ int LuaScriptInterface::simulation_partKill(lua_State * l)
|
|||||||
if(lua_gettop(l)==2)
|
if(lua_gettop(l)==2)
|
||||||
luacon_sim->delete_part(lua_tointeger(l, 1), lua_tointeger(l, 2));
|
luacon_sim->delete_part(lua_tointeger(l, 1), lua_tointeger(l, 2));
|
||||||
else
|
else
|
||||||
luacon_sim->kill_part(lua_tointeger(l, 1));
|
{
|
||||||
|
int i = lua_tointeger(l, 1);
|
||||||
|
if (i>=0 && i<NPART)
|
||||||
|
luacon_sim->kill_part(i);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1599,7 +1606,7 @@ int LuaScriptInterface::simulation_pmap(lua_State * l)
|
|||||||
if(x < 0 || x >= XRES || y < 0 || y >= YRES)
|
if(x < 0 || x >= XRES || y < 0 || y >= YRES)
|
||||||
return luaL_error(l, "coordinates out of range (%d,%d)", x, y);
|
return luaL_error(l, "coordinates out of range (%d,%d)", x, y);
|
||||||
r=luacon_sim->pmap[y][x];
|
r=luacon_sim->pmap[y][x];
|
||||||
if(!r&0xFF)
|
if(!(r&0xFF))
|
||||||
return 0;
|
return 0;
|
||||||
lua_pushnumber(l, r>>8);
|
lua_pushnumber(l, r>>8);
|
||||||
return 1;
|
return 1;
|
||||||
@ -1629,7 +1636,7 @@ int NeighboursClosure(lua_State * l)
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
i=luacon_sim->pmap[y+sx][x+sx];
|
i=luacon_sim->pmap[y+sy][x+sx];
|
||||||
} while(!(i&0xFF));
|
} while(!(i&0xFF));
|
||||||
lua_pushnumber(l, x);
|
lua_pushnumber(l, x);
|
||||||
lua_replace(l, lua_upvalueindex(5));
|
lua_replace(l, lua_upvalueindex(5));
|
||||||
|
Loading…
Reference in New Issue
Block a user