Ejemplo n.º 1
0
bool ETHRenderEntity::IsSpriteVisible(const ETHSceneProperties& sceneProps, const ETHBackBufferTargetManagerPtr& backBuffer) const
{
	if (!m_pSprite || IsHidden())
		return false;

	const float angle = GetAngle();
	if (GetType() == ETHEntityProperties::ET_VERTICAL || angle == 0.0f)
	{
		const Vector2& bufferSize = backBuffer->GetBufferSize();
		const ETHEntityProperties::VIEW_RECT& rect = GetScreenRect(sceneProps);
		const Vector2& min = rect.min;
		const Vector2& max = rect.max;
		if (min.x > bufferSize.x || min.y > bufferSize.y)
		{
			return false;
		}
		else if (max.x < 0.0f || max.y < 0.0f)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		// TODO/TO-DO perform this in the OrientedBoundingBox class
		const Vector2& size = GetCurrentSize();
		const float radianAngle = -DegreeToRadian(angle);
		const OrientedBoundingBox entityObb(ComputeInScreenSpriteCenter(sceneProps), size, radianAngle);
		return entityObb.Overlaps(*(backBuffer->GetOBB().get()));
	}
}