void MaskedSprite::render(const RenderState& parentRS)
    {
        if (_mask && _mask->getAnimFrame().getDiffuse().base)
        {
            Renderer::transform t = getGlobalTransform(_mask);
            RectF maskDest = _mask->getDestRect();
            RectF maskSrc = _mask->getSrcRect();
            //maskDest

            const Diffuse& df = _mask->getAnimFrame().getDiffuse();


            bool rchannel       = _useRChannel ? true    : (df.alpha ? true     : false);
            spNativeTexture msk = _useRChannel ? df.base : (df.alpha ? df.alpha : df.base);

            MaskedRenderer mr(msk, maskSrc, maskDest, t, rchannel);
            RenderState rs = parentRS;
            rs.renderer = &mr;
            mr.begin(parentRS.renderer);
            _Sprite::render(rs);
            mr.end();
        }
        else
        {
            _Sprite::render(parentRS);
        }
    }
Example #2
0
bool View::contains(const glm::vec3 &point) const {
	// Pulled from downstream ds_cinder/sprite.cpp
	if (mSize.x <= 0.0f || mSize.y <= 0.0f) return false;
	if (mScale.x <= 0.0f || mScale.y <= 0.0f) return false;

	const float			pad(0.0f);
	glm::mat4			global_m(getGlobalTransform());

	glm::vec4 pR = glm::vec4(point.x, point.y, point.z, 1.0f);
	glm::vec4 cA = global_m * glm::vec4(-pad,			-pad,			0.0f, 1.0f);
	glm::vec4 cB = global_m * glm::vec4(mSize.x + pad,	-pad,			0.0f, 1.0f);
	glm::vec4 cC = global_m * glm::vec4(mSize.x + pad,	mSize.y + pad,	0.0f, 1.0f);
	
	glm::vec4 v1 = cA - cB;
	glm::vec4 v2 = cC - cB;
	glm::vec4 v = pR - cB;

	float dot1 = glm::dot(v, v1);
	float dot2 = glm::dot(v, v2);
	float dot3 = glm::dot(v1, v1);
	float dot4 = glm::dot(v2, v2);

	return (
		dot1 >= 0 &&
		dot2 >= 0 &&
		dot1 <= dot3 &&
		dot2 <= dot4
	);
}
	/**
	* Updates the button
	*
	* @date         2015-02-27
	*
	* @revisions
	*
	* @designer
	*
	* @programmer   Jonathan Chu
	*				Lewis Scott
	*				Melvin Loho
	*
	* @return       void
	*/
	void Button::update(sf::Time& t)
	{
		static bool tog = false;
		static AppWindow& appWindow = AppWindow::getInstance();

		if (enabled) // button enabled
		{
			if (getGlobalTransform().transformRect(sprite().getLocalBounds()).contains(appWindow.getMousePositionRelativeToWindowAndView(view))) // mouse inside button
			{
				if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) // mouse clicking button
				{
					sprite().setTextureRect(clicked);

					// So that holding the mouse doesn't activate multiple times
					if (!tog)
					{
						on_click();
						tog = true;
					}
				}
				else // mouse just hovering
					sprite().setTextureRect(hover);
			}
			else //mouse outside button
				sprite().setTextureRect(normal);
		}
		else // button disabled
			sprite().setTextureRect(disabled);

		// Reset the button if the mouse is released
		if (!sf::Mouse::isButtonPressed(sf::Mouse::Left))
			tog = false;
	}
AglMatrix AglSkeleton::getGlobalTransform(int p_joint)
{
	AglJoint j = m_joints[p_joint];

	AglMatrix transform;
	if (m_scene->getDynamicNode(j.nodeID).animated)
		transform = m_scene->getDynamicNode(j.nodeID).transform;
	else
		transform = m_scene->getNode(j.nodeID).localTransform;

	if (j.parentIndex >= 0)
		return transform * getGlobalTransform(j.parentIndex);
	return transform * m_header.baseTransform;
}
Example #5
0
void Widget::processEvent(simplgui::Event event)
{
    sf::Transform globalTr = getGlobalTransform();
    sf::FloatRect widgetRect(sf::Vector2f(0.f, 0.f), getEffectiveSize());

    widgetRect = globalTr.transformRect(widgetRect);

    if(event.type == simplgui::Event::MouseButtonPressed)
    {
        if(widgetRect.contains(event.mouseButton.x, event.mouseButton.y))
        {
            setFocused(true);
            m_click = true;
        }
        else //TODO: Allow widgets to go outside their effective size rectangle (like combobox with their unfoldable list)
        {
            setFocused(false);
        }
    }
    else if(event.type == simplgui::Event::MouseButtonReleased)
    {
        m_click = false;
    }
    else if(event.type == simplgui::Event::MouseMoved)
    {
        if(widgetRect.contains(event.mouseMove.x, event.mouseMove.y))
        {
            
        }
        else //TODO: Allow widgets to go outside their effective size rectangle (like combobox with their unfoldable list)
        {
            m_click = false;
        }
    }

    doProcessEvent(event);
}
Example #6
0
Matrix4x4 Camera::getViewMatrix()
{
	return getGlobalTransform().getLookAtMatrix();
}
Example #7
0
sf::FloatRect Node::getGlobalBoundingBox()
{
    sf::Transform tf = getGlobalTransform();
    return tf.transformRect(getBoundingBox());
}