function interpolate( _a, _b, _t ) return _a + (_b - _a) * _t end function inverseInterpolate( _a, _b, _value ) return (_value - _a) / (_b - _a) end function convertBones( _iluPath, _uvRatio ) includeReference(_iluPath) local bounds = ITF_GFX_UV_ATLAS[1] local xMin = bounds.uv0.x local xMax = bounds.uv1.x local yMin = bounds.uv0.y local yMax = bounds.uv1.y local bones = {} for i=2, #ITF_GFX_UV_ATLAS do local uvData = ITF_GFX_UV_ATLAS[i] local bone = { SpriteBone = { name = uvData.flag, -- normalize X on [0, 1] and Y [-1, 1] p0 = vector2dNew(inverseInterpolate(xMin, xMax, uvData.uv0.x), 1 - 2 * inverseInterpolate(yMin, yMax, uvData.uv0.y)), p1 = vector2dNew(inverseInterpolate(xMin, xMax, uvData.uv1.x), 1 - 2 * inverseInterpolate(yMin, yMax, uvData.uv1.y)), uv0 = vector2dNew(uvData.uv0.x, 1 - uvData.uv0.y / _uvRatio), uv1 = vector2dNew(uvData.uv1.x, 1 - uvData.uv1.y / _uvRatio), }, } bone.TestSpriteBone = bone.SpriteBone appendTable(bones, {bone}) end return bones end function convertMetaData( _iluPath, _uvRatio ) local meta = { SpriteMetaData = { sprite = ITF_GFX_UV_ATLAS[1], bones = convertBones(_iluPath, _uvRatio), }, } meta.TestSpriteMetaData = SpriteMetaData return meta end