From: Pasi Kallinen Date: Sat, 22 Feb 2020 14:34:50 +0000 (+0200) Subject: Make lua selection randline create a new selection X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6648ecfe045907790ea673889d94db4cc077d67e;p=nethack Make lua selection randline create a new selection --- diff --git a/src/nhlsel.c b/src/nhlsel.c index a41e7ed5c..586a7a790 100644 --- a/src/nhlsel.c +++ b/src/nhlsel.c @@ -486,6 +486,7 @@ lua_State *L; x2 = (schar) luaL_checkinteger(L, 4); y2 = (schar) luaL_checkinteger(L, 5); roughness = (int) luaL_checkinteger(L, 6); + lua_pop(L, 5); } else if (argc == 5 && lua_type(L, 1) == LUA_TNUMBER) { x1 = (schar) luaL_checkinteger(L, 1); y1 = (schar) luaL_checkinteger(L, 2); @@ -502,8 +503,9 @@ lua_State *L; get_location_coord(&x2, &y2, ANY_LOC, g.coder ? g.coder->croom : NULL, SP_COORD_PACK(x2, y2)); + (void) l_selection_clone(L); + sel = l_selection_check(L, 1); selection_do_randline(x1, y1, x2, y2, roughness, 12, sel); - lua_settop(L, 1); return 1; } diff --git a/src/sp_lev.c b/src/sp_lev.c index 775dc10ea..ef56a6794 100644 --- a/src/sp_lev.c +++ b/src/sp_lev.c @@ -4474,14 +4474,8 @@ struct selectionvar *ov; int mx, my; int dx, dy; - if (rec < 1) { + if (rec < 1 || (x2 == x1 && y2 == y1)) return; - } - - if ((x2 == x1) && (y2 == y1)) { - selection_setpoint(x1, y1, ov, 1); - return; - } if (rough > max(abs(x2 - x1), abs(y2 - y1))) rough = max(abs(x2 - x1), abs(y2 - y1)); @@ -4498,7 +4492,9 @@ struct selectionvar *ov; } while ((mx > COLNO - 1 || mx < 0 || my < 0 || my > ROWNO - 1)); } - selection_setpoint(mx, my, ov, 1); + if (!selection_getpoint(mx, my, ov)) { + selection_setpoint(mx, my, ov, 1); + } rough = (rough * 2) / 3; @@ -4506,6 +4502,8 @@ struct selectionvar *ov; selection_do_randline(x1, y1, mx, my, rough, rec, ov); selection_do_randline(mx, my, x2, y2, rough, rec, ov); + + selection_setpoint(x2, y2, ov, 1); } void diff --git a/test/test_sel.lua b/test/test_sel.lua index 509731fe6..4e911a512 100644 --- a/test/test_sel.lua +++ b/test/test_sel.lua @@ -278,6 +278,20 @@ function test_sel_fillrect() end end -- test_sel_fillrect +function test_sel_randline() + local __func__ = "test_sel_randline"; + local sela = selection.new(); + local sela_clone = sela:clone(); + + -- roughness 0 is drawn line a straight line + local selb = sela:randline(1,1, 5,5, 0); + sel_are_equal(sela, sela_clone, __func__); + sel_has_n_points(selb, 5, __func__); + for x = 1, 5 do + sel_pt_ne(selb, x,x, 1, __func__); + end +end -- test_sel_randline + test_selection_params(); test_sel_negate(); test_sel_logical_and(); @@ -287,3 +301,4 @@ test_sel_filter_percent(); test_sel_line(); test_sel_rect(); test_sel_fillrect(); +test_sel_randline();