Add one sided edge support. Just not sure if the ghost vertices are fine.

This commit is contained in:
Garrett Brown
2020-08-16 19:12:56 -04:00
parent 09db462fd6
commit 8f4476ca3d
3 changed files with 14 additions and 4 deletions
+11 -2
View File
@@ -83,10 +83,19 @@ PolygonShape *Physics::newRectangleShape(float x, float y, float w, float h, flo
return new PolygonShape(s);
}
EdgeShape *Physics::newEdgeShape(float x1, float y1, float x2, float y2)
EdgeShape *Physics::newEdgeShape(float x1, float y1, float x2, float y2, bool oneSided)
{
b2EdgeShape *s = new b2EdgeShape();
s->SetTwoSided(Physics::scaleDown(b2Vec2(x1, y1)), Physics::scaleDown(b2Vec2(x2, y2)));
if (oneSided)
{
b2Vec2 v1 = Physics::scaleDown(b2Vec2(x1, y1));
b2Vec2 v2 = Physics::scaleDown(b2Vec2(x2, y2));
s->SetOneSided(v1, v1, v2, v2);
}
else
{
s->SetTwoSided(Physics::scaleDown(b2Vec2(x1, y1)), Physics::scaleDown(b2Vec2(x2, y2)));
}
return new EdgeShape(s);
}
+1 -1
View File
@@ -140,7 +140,7 @@ public:
* @param x2 The x coordinate of the second point.
* @param y2 The y coordinate of the second point.
**/
EdgeShape *newEdgeShape(float x1, float y1, float x2, float y2);
EdgeShape *newEdgeShape(float x1, float y1, float x2, float y2, bool oneSided);
/**
* Creates a new PolygonShape from a variable number of vertices.
+2 -1
View File
@@ -160,8 +160,9 @@ int w_newEdgeShape(lua_State *L)
float y1 = (float)luaL_checknumber(L, 2);
float x2 = (float)luaL_checknumber(L, 3);
float y2 = (float)luaL_checknumber(L, 4);
bool oneSided = luax_optboolean(L, 5, false);
EdgeShape *shape;
luax_catchexcept(L, [&](){ shape = instance()->newEdgeShape(x1, y1, x2, y2); });
luax_catchexcept(L, [&](){ shape = instance()->newEdgeShape(x1, y1, x2, y2, oneSided); });
luax_pushtype(L, shape);
shape->release();
return 1;