float FontManager::textHeight( const std::string& text, float textBoxWidth )
	{
		// Check we have a font
		if ( !isValid() )
		{
			LOG_ERROR( "FontManager::textWidth. FontManager is not Valid or not Initialized. Maybe there is no active font set? Call textFont to set the active font" );
			return 0.0f;
		}

		// Check empty text case
		if ( text == "" )
			return 0.0f;

		// TODO: this is not the ideal way to calculate this (it should just be on the font class, but for now)
		MovableText* newText = getNewText();

		// Font properties
		newText->setFontName( m_activeFontProperties.fontName );
		newText->setCharacterHeight( m_activeFontProperties.size );
		newText->setLeading( m_activeFontProperties.leading );
		newText->setColor( GraphicsManager::getSingleton().getFillColor().normalized() );
		newText->setTextAreaWidth( m_activeFontProperties.width );
		newText->setTextAreaHeight( m_activeFontProperties.height );
		newText->setTextAlignment(m_activeFontProperties.halign, m_activeFontProperties.valign);
		newText->setCaption( m_activeFontProperties.text.toChar() );

		// Get the height
		float textHeigh = newText->getTextBlockHeightPixels( text, textBoxWidth );

		// Make the text invisible again just in case (This is related with the TODO, it should be calculated by the Font class)
		newText->show(false);
		
		return textHeigh;
	}
Exemple #2
0
void PlayState::loadYmlText(){

    std::ifstream textFin("../../data/text.yml");

    YAML::Parser textParser(textFin);
    YAML::Node textDoc;
    textParser.GetNextDocument(textDoc);

    MovableText* msg = new MovableText("TXT_001", "Press CTRL to Crouch", "Nadia");
        msg->setTextAlignment(MovableText::H_CENTER, MovableText::V_ABOVE); // Center horizontally and display above the node
        //msg->setCharacterHeight(text.characterHeight);
        msg->setCharacterHeight(100);
        SceneNode *mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("textNode", Vector3(100, -1000, -100) );
        mNode->attachObject(msg);

    for(unsigned i = 0; i< textDoc.size(); i++){
        YamlText text;
        textDoc[i] >> text;

        /*
        MovableText* msg = new MovableText(text.name, text.text, text.fontName);
        msg->setTextAlignment(MovableText::H_CENTER, MovableText::V_ABOVE); // Center horizontally and display above the node
        //msg->setCharacterHeight(text.characterHeight);
        msg->setCharacterHeight(100);
        SceneNode *mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(text.nodeName, Vector3(text.position.x, text.position.y, text.position.z) );
        mNode->attachObject(msg);
        */

    }
}
	/**
	* @brief Add a text to be render queue with the current properties set by user calls
	*/
	void FontManager::addText()
	{
		// Check the manager is ok
		if ( !isValid() )
		{
			LOG_ERROR( "text error: FontManager not properly initialized. The init method has not been called or there are no active font" );
			return;
		}

		// Add a new font (to be rendered later)
		MovableText* newText = getNewText();

		// Font properties
		newText->setFontName( m_activeFontProperties.fontName );
		newText->setCharacterHeight( m_activeFontProperties.size );
		newText->setLeading( m_activeFontProperties.leading );
		newText->setColor( GraphicsManager::getSingleton().getFillColor().normalized() );
		newText->setTextAreaWidth( m_activeFontProperties.width );
		newText->setTextAreaHeight( m_activeFontProperties.height );
		newText->setTextAlignment(m_activeFontProperties.halign, m_activeFontProperties.valign);
		newText->setCaption( m_activeFontProperties.text.toUTF() );
		newText->setWordWrap( m_activeFontProperties.wordWrap );

		// Text display properties
		newText->showOnTop();
		newText->setAlwaysFaceCamera( false );
		newText->show();

		// Get global transformation
		Transform &t = GraphicsManager::getSingleton().m_transforms.top();

		// Font Position
		Vector fontPos( m_activeFontProperties.x, m_activeFontProperties.y, m_activeFontProperties.z );
		Vector transformedPos = t.getPosition() + fontPos;
		Vector scale = t.getScale();

		// Control current coordinate system
		if ( GraphicsManager::getSingleton().isProcessingMode() )
		{
			if ( m_activeFontProperties.render2d )
			{
				newText->setPosition( transformedPos.x, height - transformedPos.y );	
				newText->setScale( scale.x, -scale.y );
			}
			else
			{
				newText->setPosition( transformedPos );	
				newText->setScale( scale.x, -scale.y, scale.z );
			}
			
			newText->getParentNode()->setOrientation( t.getRotQuaternion().Inverse() );
		}
		else
		{
			if ( m_activeFontProperties.render2d )
			{
				newText->setPosition( transformedPos.x, transformedPos.y );	
				newText->setScale( scale.x, scale.y );
			}
			else
			{
				newText->setPosition( transformedPos );	
				newText->setScale( scale );
			}

			newText->getParentNode()->setOrientation( t.getRotQuaternion() );
		}

		// Setup text geometry for render
		newText->_setupGeometry();
	}