llhudtext.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llhudtext.h
  3.  * @brief LLHUDText class definition
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLHUDTEXT_H
  33. #define LL_LLHUDTEXT_H
  34. #include "llpointer.h"
  35. #include "lldarrayptr.h"
  36. #include "llhudobject.h"
  37. #include "v4color.h"
  38. #include "v4coloru.h"
  39. #include "v2math.h"
  40. #include "llrect.h"
  41. #include "llframetimer.h"
  42. #include "llfontgl.h"
  43. #include <set>
  44. #include <vector>
  45. #include "lldarray.h"
  46. // Renders a 2D text billboard floating at the location specified.
  47. class LLDrawable;
  48. class LLHUDText;
  49. struct lltextobject_further_away
  50. {
  51. bool operator()(const LLPointer<LLHUDText>& lhs, const LLPointer<LLHUDText>& rhs) const;
  52. };
  53. class LLHUDText : public LLHUDObject
  54. {
  55. protected:
  56. class LLHUDTextSegment
  57. {
  58. public:
  59. LLHUDTextSegment(const LLWString& text, const LLFontGL::StyleFlags style, const LLColor4& color)
  60. : mColor(color), mStyle(style), mText(text) {}
  61. F32 getWidth(const LLFontGL* font);
  62. const LLWString& getText() const { return mText; };
  63. void clearFontWidthMap() { mFontWidthMap.clear(); }
  64. LLColor4 mColor;
  65. LLFontGL::StyleFlags mStyle;
  66. private:
  67. LLWString mText;
  68. std::map<const LLFontGL*, F32> mFontWidthMap;
  69. };
  70. public:
  71. typedef enum e_text_alignment
  72. {
  73. ALIGN_TEXT_LEFT,
  74. ALIGN_TEXT_CENTER
  75. } ETextAlignment;
  76. typedef enum e_vert_alignment
  77. {
  78. ALIGN_VERT_TOP,
  79. ALIGN_VERT_CENTER
  80. } EVertAlignment;
  81. public:
  82. void setStringUTF8(const std::string &utf8string);
  83. void setString(const LLWString &wstring);
  84. void clearString();
  85. void addLine(const std::string &text, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL);
  86. void addLine(const LLWString &wtext, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL);
  87. void setLabel(const std::string &label);
  88. void setLabel(const LLWString &label);
  89. void setDropShadow(const BOOL do_shadow);
  90. void setFont(const LLFontGL* font);
  91. void setColor(const LLColor4 &color);
  92. void setUsePixelSize(const BOOL use_pixel_size);
  93. void setZCompare(const BOOL zcompare);
  94. void setDoFade(const BOOL do_fade);
  95. void setVisibleOffScreen(BOOL visible) { mVisibleOffScreen = visible; }
  96. // mMaxLines of -1 means unlimited lines.
  97. void setMaxLines(S32 max_lines) { mMaxLines = max_lines; }
  98. void setFadeDistance(F32 fade_distance, F32 fade_range) { mFadeDistance = fade_distance; mFadeRange = fade_range; }
  99. void updateVisibility();
  100. LLVector2 updateScreenPos(LLVector2 &offset_target);
  101. void updateSize();
  102. void setMass(F32 mass) { mMass = llmax(0.1f, mass); }
  103. void setTextAlignment(ETextAlignment alignment) { mTextAlignment = alignment; }
  104. void setVertAlignment(EVertAlignment alignment) { mVertAlignment = alignment; }
  105. /*virtual*/ void markDead();
  106. friend class LLHUDObject;
  107. /*virtual*/ F32 getDistance() const { return mLastDistance; }
  108. void setUseBubble(BOOL use_bubble) { mUseBubble = use_bubble; }
  109. S32  getLOD() { return mLOD; }
  110. BOOL getVisible() { return mVisible; }
  111. BOOL getHidden() const { return mHidden; }
  112. void setHidden( BOOL hide ) { mHidden = hide; }
  113. void setOnHUDAttachment(BOOL on_hud) { mOnHUDAttachment = on_hud; }
  114. void shift(const LLVector3& offset);
  115. BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3& intersection, BOOL debug_render = FALSE);
  116. static void shiftAll(const LLVector3& offset);
  117. static void renderAllHUD();
  118. static void addPickable(std::set<LLViewerObject*> &pick_list);
  119. static void reshape();
  120. static void setDisplayText(BOOL flag) { sDisplayText = flag ; }
  121. protected:
  122. LLHUDText(const U8 type);
  123. /*virtual*/ void render();
  124. /*virtual*/ void renderForSelect();
  125. void renderText(BOOL for_select);
  126. static void updateAll();
  127. void setLOD(S32 lod);
  128. S32 getMaxLines();
  129. private:
  130. ~LLHUDText();
  131. BOOL mOnHUD;
  132. BOOL mUseBubble;
  133. BOOL mDropShadow;
  134. BOOL mDoFade;
  135. F32 mFadeRange;
  136. F32 mFadeDistance;
  137. F32 mLastDistance;
  138. BOOL mUsePixelSize;
  139. BOOL mZCompare;
  140. BOOL mVisibleOffScreen;
  141. BOOL mOffscreen;
  142. LLColor4 mColor;
  143. LLVector3 mScale;
  144. F32 mWidth;
  145. F32 mHeight;
  146. LLColor4U mPickColor;
  147. const LLFontGL* mFontp;
  148. const LLFontGL* mBoldFontp;
  149. LLRectf mSoftScreenRect;
  150. LLVector3 mPositionAgent;
  151. LLVector2 mPositionOffset;
  152. LLVector2 mTargetPositionOffset;
  153. F32 mMass;
  154. S32 mMaxLines;
  155. S32 mOffsetY;
  156. F32 mRadius;
  157. std::vector<LLHUDTextSegment> mTextSegments;
  158. std::vector<LLHUDTextSegment> mLabelSegments;
  159. LLFrameTimer mResizeTimer;
  160. ETextAlignment mTextAlignment;
  161. EVertAlignment mVertAlignment;
  162. S32 mLOD;
  163. BOOL mHidden;
  164. static BOOL    sDisplayText ;
  165. static std::set<LLPointer<LLHUDText> > sTextObjects;
  166. static std::vector<LLPointer<LLHUDText> > sVisibleTextObjects;
  167. static std::vector<LLPointer<LLHUDText> > sVisibleHUDTextObjects;
  168. typedef std::set<LLPointer<LLHUDText> >::iterator TextObjectIterator;
  169. typedef std::vector<LLPointer<LLHUDText> >::iterator VisibleTextObjectIterator;
  170. };
  171. #endif // LL_LLHUDTEXT_H