Ejemplo n.º 1
0
	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 };
	}
Ejemplo n.º 2
0
	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 };
	}
Ejemplo n.º 3
0
	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 };
	}
Ejemplo n.º 4
0
	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 };
	}
Ejemplo n.º 5
0
	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);
	}