--
[ Picked text/plain from multipart/alternative ]
1) Declare as a private variable for the class:
vgui::HFont m_hFont;

Be sure to set it to a font in the constructor, we set to trebuchet:
m_hFont = g_hFontTrebuchet24;

2) Declare as a private variable for the class:
wchar_t sIDString[256];

3) You're right, code could be cleaned by moving variable declaration out of
Paint method.

Good luck!

On 4/16/07, Dest Romano <[EMAIL PROTECTED]> wrote:
>
> Hello, That looks like a really great method of drawing text so I coded it
> in. I have three questions
>
> 1) Where is m_hFont declared and how could I access m_hFont
> 2) Where is sIDString declared and what type of variable is it (char*
> dosen't seem to work)
> 3) Why do you declare so many variables in a class that will run every
> frame, why not just storing them on the player under public?
>
> Thanks for the method Oliver!
> -Dest
>
>
> >From: Oliver <[EMAIL PROTECTED]>
> >Reply-To: hlcoders@list.valvesoftware.com
> >To: hlcoders@list.valvesoftware.com
> >Subject: Re: [hlcoders] Client Side Text
> >Date: Sun, 15 Apr 2007 23:11:22 -0400
> >
> >--
> >[ Picked text/plain from multipart/alternative ]
> >Here's how we did it:
> >
> >Create a client-side class that extends CHudElement and vgui::Panel
> >
> >The Paint method is used to draw the text (fade as distance increases).
> >The
> >InView method determines if the other player is in view of the local
> >player.
> >
> >I make no claims to the elegance of this code, but it does work.  :)
> >
> >void YourClassName::Paint()
> >{
> >     C_HL2MP_Player *pLocalPlayer =
> C_HL2MP_Player::GetLocalHL2MPPlayer();
> >
> >     if ( !pLocalPlayer )
> >         return;
> >
> >     Vector origin;
> >     int x, y, length, wide, tall, offsetZ, alpha;
> >     for ( int iEntIndex = 0; iEntIndex <
> >cl_entitylist->NumberOfEntities();
> >iEntIndex++ )
> >     {
> >         if ( IsPlayerIndex( iEntIndex ) )
> >         {
> >             C_BasePlayer *pPlayer =
> >static_cast<C_BasePlayer*>(cl_entitylist->GetEnt( iEntIndex ));
> >
> >             if( pPlayer && !pPlayer->IsLocalPlayer() )
> >             {
> >                 if(InView(pLocalPlayer, pPlayer))
> >                 {
> >                     sIDString[0] = 0;
> >
> >vgui::localize()->ConvertANSIToUnicode(pPlayer->GetPlayerName(),
> sIDString,
> >sizeof(sIDString));
> >
> >                     length = (pPlayer->GetAbsOrigin() -
> >pLocalPlayer->GetAbsOrigin()).Length();
> >                     offsetZ = 72;
> >                     offsetZ += (length - 80)/12.6;
> >                     if(length <= 400) alpha = 255;
> >                     else
> >                     {
> >                         alpha = 655 - length;
> >                         if(alpha < 0) alpha = 0;
> >                     }
> >
> >
> >                     vgui::surface()->GetTextSize( m_hFont, sIDString,
> >wide,
> >tall );
> >
> >                     Vector offset = Vector(0,0,offsetZ);
> >                     GetVectorInScreenSpace(pPlayer->GetAbsOrigin(), x,
> y,
> >&offset);
> >                     x -= wide/2;
> >
> >                     vgui::surface()->DrawSetTextFont(m_hFont);
> >                     vgui::surface()->DrawSetTextPos(x, y);
> >
> >vgui::surface()->DrawSetTextColor(Color(255,255,255,alpha));
> >                     vgui::surface()->DrawPrintText(sIDString,
> >wcslen(sIDString));
> >                 }
> >             }
> >         }
> >     }
> >}
> >
> >bool YourClassName::InView(C_BasePlayer *pLocalPlayer, C_BasePlayer
> >*pPlayer)
> >{
> >     // Clip text that is far away
> >     if((pLocalPlayer->GetAbsOrigin() -
> >pPlayer->GetAbsOrigin()).LengthSqr()
> > > 90000000) return false;
> >
> >     // Clip text that is behind the client
> >     Vector clientForward;
> >     pLocalPlayer->EyeVectors( &clientForward );
> >
> >     Vector toText    = pPlayer->GetAbsOrigin() -
> >pLocalPlayer->GetAbsOrigin();
> >      float  dotPr    = DotProduct(clientForward,toText);
> >
> >     if (dotPr < 0) return false;
> >
> >     //Clip text that is obscured
> >     trace_t tr;
> >     Vector forward = pPlayer->GetAbsOrigin() -
> >pLocalPlayer->GetAbsOrigin();
> >     int length = forward.Length();
> >     forward.NormalizeInPlace();
> >     UTIL_TraceLine(pLocalPlayer->Weapon_ShootPosition(), forward *
> >MAX_TRACE_LENGTH, (MASK_SHOT & ~CONTENTS_WINDOW), pLocalPlayer,
> >COLLISION_GROUP_NONE, &tr);
> >
> >     if((tr.endpos - pLocalPlayer->GetAbsOrigin()).Length() < length)
> >     {
> >         return false;
> >     }
> >     return true;
> >}
> >
> >On 4/15/07, Dest Romano <[EMAIL PROTECTED]> wrote:
> > >
> > > Hello everyone,
> > >
> > > I am attempting to draw text over other players' heads.
> > >
> > > Serverside, NDebugOverlay::Text works perfectly fine
> > > However, I don't want to draw text over myself, so I am going to draw
> it
> > > client side.
> > >
> > > When I do NDebugOverlay::Text clientside, it gives me an unresolved
> > > external
> > > symbol.
> > >
> > > I do have debugoverlay_shared.h included, and it is in game_shared, so
> I
> > > don't see what is wrong.
> > >
> > > baseplayer_shared.obj : error LNK2019: unresolved external symbol
> "void
> > > __cdecl NDebugOverlay::Text(class Vector const &,char const
> >*,bool,float)"
> > > ([EMAIL PROTECTED]@@YAXABVVector@@[EMAIL PROTECTED]) referenced in 
> > > function
> > > "public: virtual void __thiscall C_BasePlayer::DrawJumbleNames(void)"
> > > ([EMAIL PROTECTED]@@UAEXXZ)
> > > 1>Release HL2MP/client.dll : fatal error LNK1120: 1 unresolved
> externals
> > >
> > > If anyone has another more flexible method of drawing text over
> entities
> > > client side, or a solution to this error, I would love to hear it!
> > >
> > > Thanks,
> > > Dest
> > >
>
> _________________________________________________________________
> MSN is giving away a trip to Vegas to see Elton John. Enter to win today.
> http://msnconcertcontest.com?icid-nceltontagline
>
>
> _______________________________________________
> To unsubscribe, edit your list preferences, or view the list archives,
> please visit:
> http://list.valvesoftware.com/mailman/listinfo/hlcoders
>
>
--

_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders

Reply via email to