Changeset 144

Show
Ignore:
Timestamp:
09/01/10 17:07:59 (17 months ago)
Author:
Carsten
Message:

Revised classes ScrollInfoT and FontT, fixing bug #21.
Thanks to Luigi Auriemma for the report!

Location:
cafu/trunk
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • cafu/trunk/Ca3DE/Client/ClientStateInGame.cpp

    r136 r144  
    405405            static ConVarT ShowPosition("showPos", false, ConVarT::FLAG_MAIN_EXE, "Toggles whether the current players position is shown."); 
    406406 
    407             if (ShowFrameRate.GetValueBool()) Font_f.Print(FrameSize.GetWidth()-100, FrameSize.GetHeight()-16, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, "FPS %5.1f", 1.0f/FrameTime); 
     407            if (ShowFrameRate.GetValueBool()) Font_f.Print(FrameSize.GetWidth()-100, FrameSize.GetHeight()-16, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, cf::va("FPS %5.1f", 1.0f/FrameTime)); 
    408408 
    409409            if (ShowPosition.GetValueBool()) 
     
    415415                //     LeafContents=World->GetCa3DEWorldP()->Map.Leaves[LeafNr].IsWaterLeaf ? 'w' : 'i'; 
    416416 
    417                 Font_f.Print(FrameSize.GetWidth()-130, 15, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, "X %10.1f", OurEntityCurrentState->Origin.x); 
    418                 Font_f.Print(FrameSize.GetWidth()-130, 35, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, "Y %10.1f", OurEntityCurrentState->Origin.y); 
    419                 Font_f.Print(FrameSize.GetWidth()-130, 55, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, "Z %10.1f", OurEntityCurrentState->Origin.z); 
    420                 Font_f.Print(FrameSize.GetWidth()-130, 75, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, "Hdg %8u", OurEntityCurrentState->Heading); 
    421              // Font_f.Print(FrameSize.GetWidth()-100, FrameSize.GetHeight()-32, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, "L %4u %c", LeafNr, LeafContents); 
     417                Font_f.Print(FrameSize.GetWidth()-130, 15, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, cf::va("X %10.1f", OurEntityCurrentState->Origin.x)); 
     418                Font_f.Print(FrameSize.GetWidth()-130, 35, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, cf::va("Y %10.1f", OurEntityCurrentState->Origin.y)); 
     419                Font_f.Print(FrameSize.GetWidth()-130, 55, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, cf::va("Z %10.1f", OurEntityCurrentState->Origin.z)); 
     420                Font_f.Print(FrameSize.GetWidth()-130, 75, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, cf::va("Hdg %8u", OurEntityCurrentState->Heading)); 
     421             // Font_f.Print(FrameSize.GetWidth()-100, FrameSize.GetHeight()-32, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00FFFFFF, cf::va("L %4u %c", LeafNr, LeafContents)); 
    422422            } 
    423423 
     
    529529 
    530530            #ifdef DEBUG 
    531                 LoadingFont->Print(FrameSize.GetWidth()/2-34*CharWidth/2, FrameSize.GetHeight()*9/10+12, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00800000, "Version: %s [Debug build], %s", __DATE__, LoadingProgressText.c_str()); 
     531                LoadingFont->Print(FrameSize.GetWidth()/2-34*CharWidth/2, FrameSize.GetHeight()*9/10+12, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00800000, "Version: "__DATE__" [Debug build], "+LoadingProgressText); 
    532532            #else 
    533                 LoadingFont->Print(FrameSize.GetWidth()/2-20*CharWidth/2, FrameSize.GetHeight()*9/10+12, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00800000, "Version: %s", __DATE__); 
     533                LoadingFont->Print(FrameSize.GetWidth()/2-20*CharWidth/2, FrameSize.GetHeight()*9/10+12, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00800000, "Version: "__DATE__); 
    534534            #endif 
    535535 
    536536            if (LoadingProgressPercent>0) 
    537                 LoadingFont->Print(FrameSize.GetWidth()/2-10*CharWidth/2, FrameSize.GetHeight()*9/10+30, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00800000, "Loading... %.0f%%", LoadingProgressPercent*100.0f); 
     537                LoadingFont->Print(FrameSize.GetWidth()/2-10*CharWidth/2, FrameSize.GetHeight()*9/10+30, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00800000, cf::va("Loading... %.0f%%", LoadingProgressPercent*100.0f)); 
    538538            else 
    539539                LoadingFont->Print(FrameSize.GetWidth()/2-10*CharWidth/2, FrameSize.GetHeight()*9/10+30, FrameSize.GetWidth(), FrameSize.GetHeight(), 0x00800000, "Loading..."); 
     
    747747                        Client.NextState=ClientT::IDLE; 
    748748 
    749                 Console->Print(cf::va("Client with EntityID %u has left the game. Reason: %s\n", EntityID, Reason)); 
    750                 SystemScrollInfo.Print("Client with EntityID %u has left the game. Reason: %s", EntityID, Reason); 
     749                const std::string msg=cf::va("Client with EntityID %u has left the game. Reason: ", EntityID)+Reason+"\n"; 
     750 
     751                Console->Print(msg); 
     752                SystemScrollInfo.Print(msg); 
    751753                break; 
    752754            } 
    753755 
    754756            default: 
     757            { 
    755758                // Alle SC1_EntityUpdate-Messages sollten nach SC1_FrameInfo schon gelesen worden sein! 
    756759                cf::LogDebug(net, "SC1_???: WARNING: Unknown SC1_* in-game message type '%u' received!\n", MessageType); 
    757                 Console->Print(cf::va("WARNING: Unknown in-game message type '%3u' received!\n", MessageType)); 
    758                 SystemScrollInfo.Print("WARNING: Unknown in-game message type '%3u' received!", MessageType); 
     760 
     761                const std::string msg=cf::va("WARNING: Unknown in-game message type '%3u' received!\n", MessageType); 
     762 
     763                Console->Print(msg); 
     764                SystemScrollInfo.Print(msg); 
    759765                // assert(false); 
     766            } 
    760767        } 
    761768    } 
  • cafu/trunk/Ca3DE/Client/ScrlInfo.cpp

    r136 r144  
    2222*/ 
    2323 
    24 /*******************/ 
    25 /*** Scroll Info ***/ 
    26 /*******************/ 
    27  
    28 #include <stdio.h> 
    29 #include <stdarg.h> 
    30  
    3124#include "ScrlInfo.hpp" 
    3225#include "Fonts/Font.hpp" 
    3326#include "ConsoleCommands/ConVar.hpp" 
    3427 
    35 #if defined(_WIN32) 
    36     #if defined(_MSC_VER) 
    37         #define vsnprintf _vsnprintf 
    38     #endif 
    39 #endif 
    4028 
    41  
    42 static ConVarT TimeToLive("cl_MsgShowTime", 6.0, ConVarT::FLAG_MAIN_EXE, "How long (in seconds) info and chat messages are shown.", 0.0f, 30.0); 
     29static ConVarT TimeToLive("cl_MsgShowTime", 6.0, ConVarT::FLAG_MAIN_EXE, "How long (in seconds) info and chat messages are shown.", 0.0, 30.0); 
    4330 
    4431 
    4532ScrollInfoT::ScrollInfoT() 
     33    : m_MAX_LINES(8) 
    4634{ 
    47     assert(TimeToLive.GetType()==ConVarT::Double); 
    48  
    49     MAX_LINES =8; 
    50     FirstLine =0; 
    51     NrOfLines =0; 
    52     TimeLeft  =float(TimeToLive.GetValueDouble()); 
    53  
    54     InfoLine.PushBackEmpty(MAX_LINES); 
    55     for (char LineNr=0; LineNr<MAX_LINES; LineNr++) 
    56     { 
    57         InfoLine[LineNr].PushBackEmpty(256); 
    58         InfoLine[LineNr][0]=0; 
    59     } 
     35    m_TimeLeft=float(TimeToLive.GetValueDouble()); 
    6036} 
    6137 
    6238 
    63 void ScrollInfoT::Print(const char* PrintString, ...) 
     39void ScrollInfoT::Print(const std::string& Line) 
    6440{ 
    65     va_list ArgList; 
    66     char    InfoLineString[256]; 
     41    m_InfoLines.PushBack(Line); 
    6742 
    68     if (!PrintString) return; 
    69  
    70     va_start(ArgList, PrintString); 
    71         vsnprintf(InfoLineString, 256, PrintString, ArgList); 
    72     va_end(ArgList); 
    73  
    74     if (NrOfLines==MAX_LINES) 
     43    while (m_InfoLines.Size()>m_MAX_LINES) 
    7544    { 
    76         sprintf(&InfoLine[FirstLine][0], "%s", InfoLineString); 
    77         FirstLine=(FirstLine+1) % MAX_LINES; 
    78         TimeLeft=float(TimeToLive.GetValueDouble()); 
    79         return; 
     45        m_InfoLines.RemoveAtAndKeepOrder(0); 
     46        m_TimeLeft=float(TimeToLive.GetValueDouble()); 
    8047    } 
    81  
    82     sprintf(&InfoLine[(FirstLine+NrOfLines) % MAX_LINES][0], "%s", InfoLineString); 
    83     NrOfLines++; 
    8448} 
    8549 
     
    8751void ScrollInfoT::Draw(FontT& Font, unsigned long PosX, unsigned long PosY, float FrameWidth, float FrameHeight) const 
    8852{ 
    89     if (NrOfLines==0) return; 
     53    if (m_InfoLines.Size()==0) return; 
    9054 
    9155    Font.AccPrintBegin(FrameWidth, FrameHeight); 
    9256 
    93     for (char LineNr=0; LineNr<NrOfLines; LineNr++) 
    94         Font.AccPrint(PosX, PosY+20*LineNr, 0x00BBDDFF, "%s", &InfoLine[(FirstLine+LineNr) % MAX_LINES][0]); 
     57    for (unsigned long LineNr=0; LineNr<m_InfoLines.Size(); LineNr++) 
     58        Font.AccPrint(PosX, PosY+20*LineNr, 0x00BBDDFF, m_InfoLines[LineNr]); 
    9559 
    9660    Font.AccPrintEnd(); 
     
    10064void ScrollInfoT::AdvanceTime(float FrameTime) 
    10165{ 
    102     if (NrOfLines==0) return; 
     66    if (m_InfoLines.Size()==0) return; 
    10367 
    104     TimeLeft-=FrameTime; 
    105     if (TimeLeft>0) return; 
     68    m_TimeLeft-=FrameTime; 
     69    if (m_TimeLeft>0) return; 
    10670 
    107     // Oberste Zeile entfernen 
    108     FirstLine=(FirstLine+1) % MAX_LINES; 
    109     NrOfLines--; 
    110     TimeLeft=float(TimeToLive.GetValueDouble()); 
     71    m_InfoLines.RemoveAtAndKeepOrder(0); 
     72    m_TimeLeft=float(TimeToLive.GetValueDouble()); 
    11173} 
  • cafu/trunk/Ca3DE/Client/ScrlInfo.hpp

    r136 r144  
    2222*/ 
    2323 
    24 /*******************/ 
    25 /*** Scroll Info ***/ 
    26 /*******************/ 
    27  
    2824#ifndef _CLIENT_SCROLLINFO_HPP_ 
    2925#define _CLIENT_SCROLLINFO_HPP_ 
    3026 
    3127#include "Templates/Array.hpp" 
     28#include <string> 
    3229 
    3330 
     
    3734class ScrollInfoT 
    3835{ 
    39     private: 
    40  
    41     char  MAX_LINES; 
    42     char  FirstLine; 
    43     char  NrOfLines; 
    44     float TimeLeft; 
    45     ArrayT< ArrayT<char> > InfoLine; 
    46  
    47  
    4836    public: 
    4937 
    5038    ScrollInfoT(); 
    51     void Print(const char* PrintString, ...); 
     39 
     40    void Print(const std::string& Line); 
    5241    void Draw(FontT& Font, unsigned long PosX, unsigned long PosY, float FrameWidth, float FrameHeight) const; 
    5342    void AdvanceTime(float FrameTime); 
     43 
     44 
     45    private: 
     46 
     47    const unsigned int  m_MAX_LINES; 
     48    float               m_TimeLeft; 
     49    ArrayT<std::string> m_InfoLines; 
    5450}; 
    5551 
  • cafu/trunk/CaTools/MaterialViewer.cpp

    r136 r144  
    504504 
    505505 
    506             MyFont->Print(SingleOpenGLWindow->GetWidth()-100, SingleOpenGLWindow->GetHeight()-18, float(SingleOpenGLWindow->GetWidth()), float(SingleOpenGLWindow->GetHeight()), 0x00FFFFFF, "%5.1f FPS", 1.0/DeltaTime); 
     506            MyFont->Print(SingleOpenGLWindow->GetWidth()-100, SingleOpenGLWindow->GetHeight()-18, float(SingleOpenGLWindow->GetWidth()), float(SingleOpenGLWindow->GetHeight()), 0x00FFFFFF, cf::va("%5.1f FPS", 1.0/DeltaTime)); 
    507507        } 
    508508        MatSys::Renderer->EndFrame(); 
  • cafu/trunk/Libs/Fonts/Font.cpp

    r136 r144  
    2222*/ 
    2323 
    24 /**************************/ 
    25 /*** MatSys Font (Code) ***/ 
    26 /**************************/ 
    27  
    28 #include <stdio.h> 
    29 #include <stdarg.h> 
    30 #include <string.h> 
    31  
    3224#include "Font.hpp" 
    3325#include "MaterialSystem/Material.hpp" 
     
    3628#include "MaterialSystem/Renderer.hpp" 
    3729#include "Math3D/Matrix.hpp" 
    38  
    39 #if defined(_WIN32) 
    40     #if defined(_MSC_VER) 
    41         #define vsnprintf _vsnprintf 
    42     #endif 
    43 #endif 
    4430 
    4531 
     
    7561 
    7662 
    77 void FontT::Print(int PosX, int PosY, float FrameWidth, float FrameHeight, unsigned long Color, const char* PrintString, ...) 
     63void FontT::Print(int PosX, int PosY, float FrameWidth, float FrameHeight, unsigned long Color, const std::string& PrintString) 
    7864{ 
    79     if (!PrintString) return; 
    80  
    81     va_list ArgList; 
    82     char    PrintBuffer[256]; 
    83  
    84     va_start(ArgList, PrintString); 
    85         vsnprintf(PrintBuffer, 256, PrintString, ArgList); 
    86     va_end(ArgList); 
    87  
    8865    AccPrintBegin(FrameWidth, FrameHeight); 
    89     AccPrint(PosX, PosY, Color, PrintBuffer); 
     66    AccPrint(PosX, PosY, Color, PrintString); 
    9067    AccPrintEnd(); 
    9168} 
     
    10582 
    10683 
    107 void FontT::AccPrint(int PosX, int PosY, unsigned long Color, const char* PrintString, ...) 
     84void FontT::AccPrint(int PosX, int PosY, unsigned long Color, const std::string& PrintString) 
    10885{ 
    109     if (!PrintString) return; 
    110  
    111     va_list ArgList; 
    112     char    PrintBuffer[256]; 
    113  
    114     va_start(ArgList, PrintString); 
    115         vsnprintf(PrintBuffer, 256, PrintString, ArgList); 
    116     va_end(ArgList); 
    117  
    118  
    11986    MatSys::Renderer->SetMatrix(MatSys::RendererI::MODEL_TO_WORLD, MatrixT::GetTranslateMatrix(Vector3fT(float(PosX), float(PosY), 0.0f))); 
    12087    MatSys::Renderer->SetCurrentAmbientLightColor(char((Color >> 16) & 0xFF)/255.0f, char((Color >> 8) & 0xFF)/255.0f, char(Color & 0xFF)/255.0f); 
    12188    MatSys::Renderer->SetCurrentMaterial(RenderMaterial); 
    12289 
    123  
    12490    static MatSys::MeshT TextMesh(MatSys::MeshT::Quads); 
    12591    TextMesh.Vertices.Overwrite(); 
    126     TextMesh.Vertices.PushBackEmpty((unsigned long)(4*strlen(PrintBuffer))); 
     92    TextMesh.Vertices.PushBackEmpty((unsigned long)(4*PrintString.length())); 
    12793 
    128     for (unsigned long c=0; PrintBuffer[c]; c++) 
     94    for (size_t c=0; c<PrintString.length(); c++) 
    12995    { 
    130         const float CoordX=float(PrintBuffer[c] &  0xF)/16.0f;      // PrintBuffer[c] % 16 
    131         const float CoordY=float(PrintBuffer[c] >>   4)/16.0f;      // PrintBuffer[c] / 16 
     96        const float CoordX=float(PrintString[c] &  0xF)/16.0f;      // PrintString[c] % 16 
     97        const float CoordY=float(PrintString[c] >>   4)/16.0f;      // PrintString[c] / 16 
    13298        const float Size  =16.0/256.0; 
    13399 
  • cafu/trunk/Libs/Fonts/Font.hpp

    r136 r144  
    2121================================================================================= 
    2222*/ 
    23  
    24 /****************************/ 
    25 /*** MatSys Font (Header) ***/ 
    26 /****************************/ 
    2723 
    2824#ifndef _MATSYS_FONT_HPP_ 
     
    5551 
    5652    /// Prints PrintString at (PosX, PosY) in color Color. 
    57     void Print(int PosX, int PosY, float FrameWidth, float FrameHeight, unsigned long Color, const char* PrintString, ...); 
     53    void Print(int PosX, int PosY, float FrameWidth, float FrameHeight, unsigned long Color, const std::string& PrintString); 
    5854 
    5955    /// Accumulative printing functions. Faster if you have to call Print() a lot. 
    6056    void AccPrintBegin(float FrameWidth, float FrameHeight); 
    61     void AccPrint(int PosX, int PosY, unsigned long Color, const char* PrintString, ...); 
     57    void AccPrint(int PosX, int PosY, unsigned long Color, const std::string& PrintString); 
    6258    void AccPrintEnd(); 
    6359