1 // Copyright (C) 2002-2012 Nikolaus Gebhardt 2 // This file is part of the "Irrlicht Engine". 3 // For conditions of distribution and use, see copyright notice in irrlicht.h 4 5 #ifndef __C_TEXT_SCENE_NODE_H_INCLUDED__ 6 #define __C_TEXT_SCENE_NODE_H_INCLUDED__ 7 8 #include "ITextSceneNode.h" 9 #include "IBillboardTextSceneNode.h" 10 #include "IGUIFont.h" 11 #include "IGUIFontBitmap.h" 12 #include "ISceneCollisionManager.h" 13 #include "SMesh.h" 14 15 namespace irr 16 { 17 namespace scene 18 { 19 20 21 class CTextSceneNode : public ITextSceneNode 22 { 23 public: 24 25 //! constructor 26 CTextSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, 27 gui::IGUIFont* font, scene::ISceneCollisionManager* coll, 28 const core::vector3df& position = core::vector3df(0,0,0), const wchar_t* text=0, 29 video::SColor color=video::SColor(100,0,0,0)); 30 31 //! destructor 32 virtual ~CTextSceneNode(); 33 34 virtual void OnRegisterSceneNode(); 35 36 //! renders the node. 37 virtual void render(); 38 39 //! returns the axis aligned bounding box of this node 40 virtual const core::aabbox3d<f32>& getBoundingBox() const; 41 42 //! sets the text string 43 virtual void setText(const wchar_t* text); 44 45 //! sets the color of the text 46 virtual void setTextColor(video::SColor color); 47 48 //! Returns type of the scene node getType()49 virtual ESCENE_NODE_TYPE getType() const { return ESNT_TEXT; } 50 51 private: 52 53 core::stringw Text; 54 video::SColor Color; 55 gui::IGUIFont* Font; 56 scene::ISceneCollisionManager* Coll; 57 core::aabbox3d<f32> Box; 58 }; 59 60 class CBillboardTextSceneNode : public IBillboardTextSceneNode 61 { 62 public: 63 64 CBillboardTextSceneNode(ISceneNode* parent, ISceneManager* mgr, s32 id, 65 gui::IGUIFont* font,const wchar_t* text, 66 const core::vector3df& position, const core::dimension2d<f32>& size, 67 video::SColor colorTop, video::SColor shade_bottom); 68 69 //! destructor 70 virtual ~CBillboardTextSceneNode(); 71 72 //! sets the vertex positions etc 73 virtual void OnAnimate(u32 timeMs); 74 75 //! registers the node into the transparent pass 76 virtual void OnRegisterSceneNode(); 77 78 //! renders the node. 79 virtual void render(); 80 81 //! returns the axis aligned bounding box of this node 82 virtual const core::aabbox3d<f32>& getBoundingBox() const; 83 84 //! sets the text string 85 virtual void setText(const wchar_t* text); 86 87 //! sets the color of the text 88 virtual void setTextColor(video::SColor color); 89 90 //! sets the size of the billboard 91 virtual void setSize(const core::dimension2d<f32>& size); 92 93 //! gets the size of the billboard 94 virtual const core::dimension2d<f32>& getSize() const; 95 96 virtual video::SMaterial& getMaterial(u32 i); 97 98 //! returns amount of materials used by this scene node. 99 virtual u32 getMaterialCount() const; 100 101 //! Returns type of the scene node getType()102 virtual ESCENE_NODE_TYPE getType() const { return ESNT_TEXT; } 103 104 //! Set the color of all vertices of the billboard 105 //! \param overallColor: the color to set 106 virtual void setColor(const video::SColor & overallColor); 107 108 //! Set the color of the top and bottom vertices of the billboard 109 //! \param topColor: the color to set the top vertices 110 //! \param bottomColor: the color to set the bottom vertices 111 virtual void setColor(const video::SColor & topColor, const video::SColor & bottomColor); 112 113 //! Gets the color of the top and bottom vertices of the billboard 114 //! \param topColor: stores the color of the top vertices 115 //! \param bottomColor: stores the color of the bottom vertices 116 virtual void getColor(video::SColor & topColor, video::SColor & bottomColor) const; 117 setSize(f32 height,f32 bottomEdgeWidth,f32 topEdgeWidth)118 virtual void setSize(f32 height, f32 bottomEdgeWidth, f32 topEdgeWidth) 119 { 120 setSize(core::dimension2df(bottomEdgeWidth, height)); 121 } 122 getSize(f32 & height,f32 & bottomEdgeWidth,f32 & topEdgeWidth)123 virtual void getSize(f32& height, f32& bottomEdgeWidth, f32& topEdgeWidth) const 124 { 125 height = Size.Height; 126 bottomEdgeWidth = Size.Width; 127 topEdgeWidth = Size.Width; 128 } 129 130 private: 131 132 core::stringw Text; 133 video::SColor Color; 134 gui::IGUIFontBitmap* Font; 135 136 core::dimension2d<f32> Size; 137 core::aabbox3d<f32> BBox; 138 video::SMaterial Material; 139 140 video::SColor ColorTop; 141 video::SColor ColorBottom; 142 struct SSymbolInfo 143 { 144 u32 bufNo; 145 f32 Width; 146 f32 Kerning; 147 u32 firstInd; 148 u32 firstVert; 149 }; 150 151 core::array < SSymbolInfo > Symbol; 152 153 SMesh *Mesh; 154 }; 155 156 } // end namespace scene 157 } // end namespace irr 158 159 #endif 160 161