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