--
[ 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
>
> _________________________________________________________________
> Mortgage refinance is Hot. *Terms. Get a 5.375%* fix rate. Check savings
>
> https://www2.nextag.com/goto.jsp?product=100000035&url=%2fst.jsp&tm=y&search=mortgage_text_links_88_h2bbb&disc=y&vers=925&s=4056&p=5117
>
>
> _______________________________________________
> 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