Merge pull request #2330 from erinmaus/inverse-of

Add 'inverseOf' to love.Transform
This commit is contained in:
Sasha Szpakowski
2026-06-24 21:03:03 -03:00
committed by GitHub
2 changed files with 20 additions and 0 deletions
+10
View File
@@ -141,6 +141,15 @@ int w_Transform_inverse(lua_State *L)
return 1; return 1;
} }
int w_Transform_inverseOf(lua_State *L)
{
Transform *destination = luax_checktransform(L, 1);
Transform *source = luax_checktransform(L, 2);
destination->setMatrix(source->getMatrix().inverse());
lua_pushvalue(L, 1);
return 1;
}
int w_Transform_apply(lua_State *L) int w_Transform_apply(lua_State *L)
{ {
Transform *t = luax_checktransform(L, 1); Transform *t = luax_checktransform(L, 1);
@@ -298,6 +307,7 @@ static const luaL_Reg functions[] =
{ {
{ "clone", w_Transform_clone }, { "clone", w_Transform_clone },
{ "inverse", w_Transform_inverse }, { "inverse", w_Transform_inverse },
{ "inverseOf", w_Transform_inverseOf },
{ "apply", w_Transform_apply }, { "apply", w_Transform_apply },
{ "isAffine2DTransform", w_Transform_isAffine2DTransform }, { "isAffine2DTransform", w_Transform_isAffine2DTransform },
{ "translate", w_Transform_translate }, { "translate", w_Transform_translate },
+10
View File
@@ -145,6 +145,16 @@ love.test.math.Transform = function(test)
px, py = transform:transformPoint(0, 0) px, py = transform:transformPoint(0, 0)
test:assertCoords({-px, -py}, {ipx, ipy}, 'check inverse points transform') test:assertCoords({-px, -py}, {ipx, ipy}, 'check inverse points transform')
-- check inverse and inverseOf produce same values
transform:reset()
transform:setTransformation(4, 4, math.pi / 2, 2, 2)
local inverseClone = transform:inverse()
local inverseDestinationTransform = love.math.newTransform()
inverseDestinationTransform:inverseOf(transform)
local opx1, opy1 = inverseClone:transformPoint(0, 0)
local opx2, opy2 = inverseDestinationTransform:transformPoint(0, 0)
test:assertCoords({opx1, opy1}, {opx2, opy2}, 'check inverse and inverseOf produce same values')
-- check matrix manipulation -- check matrix manipulation
transform:setTransformation(0, 0, 0, 1, 1, 0, 0, 0, 0) transform:setTransformation(0, 0, 0, 1, 1, 0, 0, 0, 0)
transform:translate(4, 4) transform:translate(4, 4)