RectF TextureRegion::draw(const double x, const double y, const ColorF& color0, const ColorF& color1, const ColorF& color2, const ColorF& color3) const { Siv3DEngine::GetRenderer2D()->addTextureRegion( texture, { x, y, x + size.x, y + size.y }, uvRect, { color0.toFloat4(), color1.toFloat4(), color2.toFloat4(), color3.toFloat4() } ); return RectF{ x, y, size }; }
RectF TextureRegion::drawAt(const double x, const double y, const ColorF& color0, const ColorF& color1, const ColorF& color2, const ColorF& color3) const { const Vec2 sizeHalf = size * 0.5; Siv3DEngine::GetRenderer2D()->addTextureRegion( texture, { x - sizeHalf.x, y - sizeHalf.y, x + sizeHalf.x, y + sizeHalf.y }, uvRect, { color0.toFloat4(), color1.toFloat4(), color2.toFloat4(), color3.toFloat4() } ); return RectF{ x - sizeHalf.x, y - sizeHalf.y, size }; }
RectF TextureRegion::draw(const double x, const double y, const ColorF& diffuse) const { Siv3DEngine::GetRenderer2D()->addTextureRegion( texture, { x, y, x + size.x, y + size.y }, uvRect, diffuse.toFloat4() ); return RectF{ x, y, size }; }
RectF TextureRegion::drawAt(const double x, const double y, const ColorF& diffuse) const { const Vec2 sizeHalf = size * 0.5; Siv3DEngine::GetRenderer2D()->addTextureRegion( texture, { x - sizeHalf.x, y - sizeHalf.y, x + sizeHalf.x, y + sizeHalf.y }, uvRect, diffuse.toFloat4() ); return RectF{ x - sizeHalf.x, y - sizeHalf.y, size }; }
RectF TextureRegion::drawClipped(const double x, const double y, const RectF& clipRect, const ColorF& diffuse) const { const double clipRight = clipRect.x + clipRect.w; const double clipBottom = clipRect.y + clipRect.h; const double left = std::max(x, clipRect.x); const double right = std::min(x + size.x, clipRight); const double top = std::max(y, clipRect.y); const double bottom = std::min(y + size.y, clipBottom); if (clipRight <= left || right <= clipRect.x || clipBottom <= top || bottom <= clipRect.y) { return RectF(left, top, 0, 0); } const float xLeftTrimmed = static_cast<float>(left - x); const float xRightTrimmed = static_cast<float>((x + size.x) - right); const float yTopTrimmed = static_cast<float>(top - y); const float yBottomTrimmed = static_cast<float>((y + size.y) - bottom); const float uLeftTrimmed = xLeftTrimmed / size.x * (uvRect.right - uvRect.left); const float uRightTrimmed = xRightTrimmed / size.x * (uvRect.right - uvRect.left); const float vTopTrimmed = yTopTrimmed / size.y * (uvRect.bottom - uvRect.top); const float vBottomTrimmed = yBottomTrimmed / size.y * (uvRect.bottom - uvRect.top); Siv3DEngine::GetRenderer2D()->addTextureRegion( texture, FloatRect(left, top, right, bottom), FloatRect(uvRect.left + uLeftTrimmed, uvRect.top + vTopTrimmed, uvRect.right - uRightTrimmed, uvRect.bottom - vBottomTrimmed), diffuse.toFloat4() ); return RectF(left, top, right - left, bottom - top); }