Merge branch 'closestpointonline' into 'next'

P_ClosestPointOnLine changes

P_ClosestPointOnLine can now (optionally) take custom coordinates for two points that you want to make up a "line", instead of just actual linedefs.

Complete syntax for P_ClosestPointOnLine as of this branch:
```lua
-- syntax for a real linedef (which is already in 2.1.14):
	P_ClosestPointOnLine(x, y, line)

-- syntax for a fake line with vertexes (x1,y1) and (x2,y2):
	P_ClosestPointOnLine(x, y, x1, y1, x2, y2)
```

See merge request !61
This commit is contained in:
Inuyasha 2016-03-31 20:16:22 -04:00
commit b2e44ca825

View file

@ -148,14 +148,38 @@ static int lib_pAproxDistance(lua_State *L)
static int lib_pClosestPointOnLine(lua_State *L) static int lib_pClosestPointOnLine(lua_State *L)
{ {
int n = lua_gettop(L);
fixed_t x = luaL_checkfixed(L, 1); fixed_t x = luaL_checkfixed(L, 1);
fixed_t y = luaL_checkfixed(L, 2); fixed_t y = luaL_checkfixed(L, 2);
line_t *line = *((line_t **)luaL_checkudata(L, 3, META_LINE));
vertex_t result; vertex_t result;
//HUDSAFE //HUDSAFE
if (lua_isuserdata(L, 3)) // use a real linedef to get our points
{
line_t *line = *((line_t **)luaL_checkudata(L, 3, META_LINE));
if (!line) if (!line)
return LUA_ErrInvalid(L, "line_t"); return LUA_ErrInvalid(L, "line_t");
P_ClosestPointOnLine(x, y, line, &result); P_ClosestPointOnLine(x, y, line, &result);
}
else // use custom coordinates of our own!
{
vertex_t v1, v2; // fake vertexes
line_t junk; // fake linedef
if (n < 6)
return luaL_error(L, "arguments 3 to 6 not all given (expected 4 fixed-point integers)");
v1.x = luaL_checkfixed(L, 3);
v1.y = luaL_checkfixed(L, 4);
v2.x = luaL_checkfixed(L, 5);
v2.y = luaL_checkfixed(L, 6);
junk.v1 = &v1;
junk.v2 = &v2;
junk.dx = v2.x - v1.x;
junk.dy = v2.y - v1.y;
P_ClosestPointOnLine(x, y, &junk, &result);
}
lua_pushfixed(L, result.x); lua_pushfixed(L, result.x);
lua_pushfixed(L, result.y); lua_pushfixed(L, result.y);
return 2; return 2;