//----------------------------------------------------------------------------------------- // // Floating Help class. Used for tool tips, building/mech/vehicle IDs. // Basically draws itself AFTER everything else since gos_Font"3D" has no Z Depth! // //---------------------------------------------------------------------------// // Copyright (C) Microsoft Corporation. All rights reserved. // //===========================================================================// #ifndef FLOATHELP_H #define FLOATHELP_H //-------------------------- // Include Files #ifndef DBASEGUI_H #include "dbasegui.h" #endif #include #include extern HGOSFONT3D gosFontHandle; extern float gosFontScale; #define MAX_FLOAT_HELPS 100 //Used for sensor information, too! //----------------------------------------------------------------------------------------- // Classes class FloatHelp { protected: char text[2048]; //Last person to set this displays the font. Stuff::Vector4D screenPos; //x,y are left and top. z,w are width and height. DWORD foregroundColor; //Color in aRGB Format. DWORD backgroundColor; //Color in aRGB Format. float scale; //Scale. 1.0f is normal. bool proportional; //if false, spacing is equal for each letter. bool bold; //if true, draws bold. bool italic; //if true, draws italic. bool wordWrap; //if true, wraps word. static DWORD currentFloatHelp; //How many of them are we using at present static FloatHelp* floatHelps; //POinters to all of them. public: FloatHelp (long maxHelps) { init(maxHelps); text[0] = 0; screenPos.x = screenPos.y = screenPos.z = screenPos.w = 0.0f; foregroundColor = SD_WHITE; backgroundColor = SD_BLACK; scale = 1.0f; proportional = true; bold = italic = wordWrap = false; } ~FloatHelp (void) { destroy(); } void init (long maxHelps); void destroy (void); static void resetAll (void); static void renderAll (void); static void setFloatHelp(char * txt, Stuff::Vector4D screenPos, DWORD fClr, DWORD bClr, float scl, bool proportional, bool bold, bool italic, bool wordWrap); static void getTextStringLength (char *text, DWORD fColor, float scl, bool proportional, bool bold, bool italic, bool wordWrap, DWORD &width, DWORD &height); protected: void setHelpText (char *txt) { if (strlen(txt) < 2048) { strcpy(text,txt); } else { text[0] = 0; } } void setScreenPos (Stuff::Vector4D pos) { screenPos = pos; } void setForegroundColor (DWORD clr) { foregroundColor = clr; } void setBackgroundColor (DWORD clr) { backgroundColor = clr; } void setScale (float scl) { scale = scl; } void setProportional (bool flag) { proportional = flag; } void setBold (bool flag) { bold = flag; } void setItalic (bool flag) { italic = flag; } void setWordWrap (bool flag) { wordWrap = flag; } void reset (void) { //Call every frame. Otherwise floating help keeps floating! text[0] = 0; } void render (void) { if (text[0]) { // must use global scale, incase of True Type fonts. gos_TextSetAttributes (gosFontHandle, foregroundColor, gosFontScale, wordWrap, proportional, bold, italic); //gos_TextDrawBackground ((int)screenPos.x, (int)screenPos.y, (int)(screenPos.x+screenPos.z), (int)(screenPos.y+screenPos.w), SD_BLACK); gos_TextSetPosition((int)screenPos.x,(int)screenPos.y); gos_TextDraw(text); } } }; typedef FloatHelp* FloatHelpPtr; //----------------------------------------------------------------------------------------- #endif