mirror of
https://github.com/love2d/love.git
synced 2026-08-15 15:51:12 +02:00
added polyline support to love.graphics.line (the syntax is the same as love.graphics.polygon - either a list or a table of vertices)
This commit is contained in:
@@ -844,6 +844,47 @@ namespace opengl
|
||||
glPopMatrix();
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
int Graphics::polyline( lua_State * L)
|
||||
{
|
||||
// Get number of params.
|
||||
int args = lua_gettop(L);
|
||||
bool table = false;
|
||||
|
||||
if (args == 1) { // we've got a table, hopefully
|
||||
int type = lua_type(L, 1);
|
||||
if (type != LUA_TTABLE)
|
||||
return luaL_error(L, "Function requires a table or series of numbers");
|
||||
table = true;
|
||||
args = lua_objlen(L, 1);
|
||||
}
|
||||
|
||||
if (args % 2) // an odd number of arguments, no good for a polyline
|
||||
return luaL_error(L, "Number of vertices must be a multiple of two");
|
||||
|
||||
// right, let's draw this polyline, then
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glBegin(GL_LINE_STRIP);
|
||||
if (table) {
|
||||
lua_pushnil(L);
|
||||
while (true) {
|
||||
if(lua_next(L, 1) == 0) break;
|
||||
GLfloat x = (GLfloat)lua_tonumber(L, -1);
|
||||
lua_pop(L, 1); // pop value
|
||||
if(lua_next(L, 1) == 0) break;
|
||||
GLfloat y = (GLfloat)lua_tonumber(L, -1);
|
||||
lua_pop(L, 1); // pop value
|
||||
glVertex2f(x, y);
|
||||
}
|
||||
} else {
|
||||
for (int i = 1; i < args; i+=2) {
|
||||
glVertex2f((GLfloat)lua_tonumber(L, i), (GLfloat)lua_tonumber(L, i+1));
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Graphics::triangle(DrawMode mode, float x1, float y1, float x2, float y2, float x3, float y3 )
|
||||
{
|
||||
|
||||
@@ -461,6 +461,12 @@ namespace opengl
|
||||
* @param y2 Second y-coordinate.
|
||||
**/
|
||||
void line(float x1, float y1, float x2, float y2);
|
||||
|
||||
/**
|
||||
* Draws a series of lines connecting the given vertices.
|
||||
* @param ... Vertex components (x1, y1, x2, y2, etc.)
|
||||
**/
|
||||
int polyline(lua_State * L);
|
||||
|
||||
/**
|
||||
* Draws a triangle using the three coordinates passed.
|
||||
|
||||
@@ -660,11 +660,16 @@ namespace opengl
|
||||
|
||||
int w_line(lua_State * L)
|
||||
{
|
||||
float x1 = (float)luaL_checknumber(L, 1);
|
||||
float y1 = (float)luaL_checknumber(L, 2);
|
||||
float x2 = (float)luaL_checknumber(L, 3);
|
||||
float y2 = (float)luaL_checknumber(L, 4);
|
||||
instance->line(x1, y1, x2, y2);
|
||||
int args = lua_gettop(L);
|
||||
if( args == 1 || args > 4) {
|
||||
instance->polyline(L);
|
||||
} else {
|
||||
float x1 = (float)luaL_checknumber(L, 1);
|
||||
float y1 = (float)luaL_checknumber(L, 2);
|
||||
float x2 = (float)luaL_checknumber(L, 3);
|
||||
float y2 = (float)luaL_checknumber(L, 4);
|
||||
instance->line(x1, y1, x2, y2);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user