hlsdk

ok finally drawstuff

Jun 21st, 2011
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.19 KB | None | 0 0
  1. #include "pch.h"
  2. #include "Sprite_.h"
  3. #include "..\..\NewNetvar.h"
  4.  
  5. static BYTE* SetupCurrentView = 0;
  6. static Vector* g_vecCurrentRenderOrigin = 0;
  7. static Vector* g_vecCurrentVUp = 0;
  8. static Vector* g_vecCurrentVRight = 0;
  9. static Vector* g_vecCurrentVForward = 0;
  10.  
  11. typedef bool (__cdecl* ScreenTransformFn)(Vector& world, Vector& screen);
  12. ScreenTransformFn ScreenTransform;
  13.  
  14. static bool bOnceSprite = false;
  15.  
  16. void Sprite_Init()
  17. {
  18.     if (!SetupCurrentView)
  19.         SetupCurrentView = (BYTE*)toolkit::FindPattern_("client.dll", (PBYTE)"\x8B\x44\x24\x04\xD9\x00\x8B\x4C\x24\x08\xD9\x1D", "xxxxxxxxxxxx");
  20.     if (!SetupCurrentView)
  21.         DebugBreak();
  22.    
  23.     g_vecCurrentRenderOrigin = *(Vector**)(SetupCurrentView + 0x0C);
  24.     g_vecCurrentVUp = *(Vector**)(SetupCurrentView + 0x24);
  25.     g_vecCurrentVRight = *(Vector**)(SetupCurrentView + 0x2F);
  26.     g_vecCurrentVForward = *(Vector**)(SetupCurrentView + 0x36);
  27.    
  28.     ScreenTransform = (ScreenTransformFn)toolkit::FindPattern_("client.dll", (PBYTE)"\x8B\x0D\x00\x00\x00\x00\x8B\x01\x8B\x90\x90\x00\x00\x00\xFF\xD2\xD9\x40\x08\x8B\x4C\x24\x04", "xx????xxxxxxxxxxxxxxxxx");
  29. }
  30.  
  31. const Vector &CurrentViewOrigin()
  32. {
  33.     return *g_vecCurrentRenderOrigin;
  34. }
  35.  
  36. const Vector &CurrentViewForward()
  37. {
  38.     return *g_vecCurrentVForward;
  39. }
  40.  
  41. const Vector &CurrentViewRight()
  42. {
  43.     return *g_vecCurrentVRight;
  44. }
  45.  
  46. const Vector &CurrentViewUp()
  47. {
  48.     return *g_vecCurrentVUp;
  49. }
  50.  
  51. void DrawHalo(IMaterial* pMaterial, Vector& source, float scale, float const* color, float flHDRColorScale )
  52. {
  53.     if (!bOnceSprite)
  54.     {
  55.         Sprite_Init();
  56.         bOnceSprite = true;
  57.     }
  58.  
  59.     static unsigned int nHDRColorScaleCache = 0;
  60.     Vector screen;
  61.     Vector point;
  62.    
  63.     CMeshBuilder meshBuilder;
  64.     CMatRenderContextPtr pRenderContext( materials );
  65.     pRenderContext->Bind(pMaterial);
  66.     IMesh* pMesh = pRenderContext->GetDynamicMesh( );
  67.     meshBuilder.Begin( pMesh, MATERIAL_QUADS, 1 );
  68.  
  69.     // Transform source into screen space
  70.     ScreenTransform( source, screen );
  71.  
  72.     meshBuilder.Color3fv (color);
  73.     meshBuilder.TexCoord2f (0, 0, 1);
  74.     VectorMA (source, -scale, CurrentViewUp(), point);
  75.     VectorMA (point, -scale, CurrentViewRight(), point);
  76.     meshBuilder.Position3fv (point.Base());
  77.     meshBuilder.AdvanceVertex();
  78.  
  79.     meshBuilder.Color3fv (color);
  80.     meshBuilder.TexCoord2f (0, 0, 0);
  81.     VectorMA (source, scale, CurrentViewUp(), point);
  82.     VectorMA (point, -scale, CurrentViewRight(), point);
  83.     meshBuilder.Position3fv (point.Base());
  84.     meshBuilder.AdvanceVertex();
  85.  
  86.     meshBuilder.Color3fv (color);
  87.     meshBuilder.TexCoord2f (0, 1, 0);
  88.     VectorMA (source, scale, CurrentViewUp(), point);
  89.     VectorMA (point, scale, CurrentViewRight(), point);
  90.     meshBuilder.Position3fv (point.Base());
  91.     meshBuilder.AdvanceVertex();
  92.  
  93.     meshBuilder.Color3fv (color);
  94.     meshBuilder.TexCoord2f (0, 1, 1);
  95.     VectorMA (source, -scale, CurrentViewUp(), point);
  96.     VectorMA (point, scale, CurrentViewRight(), point);
  97.     meshBuilder.Position3fv (point.Base());
  98.     meshBuilder.AdvanceVertex();
  99.  
  100.     meshBuilder.End();
  101.     pMesh->Draw();
  102. }
  103.  
  104. //-----------------------------------------------------------------------------
  105. // Assumes the material has already been bound
  106. //-----------------------------------------------------------------------------
  107. void DrawSprite( const Vector &vecOrigin, float flWidth, float flHeight, color32 color )
  108. {
  109.     if (!bOnceSprite)
  110.     {
  111.         Sprite_Init();
  112.         bOnceSprite = true;
  113.     }
  114.  
  115.     unsigned char pColor[4] = { color.r, color.g, color.b, color.a };
  116.  
  117.     // Generate half-widths
  118.     flWidth *= 0.5f;
  119.     flHeight *= 0.5f;
  120.  
  121.     // Compute direction vectors for the sprite
  122.     Vector fwd, right( 1, 0, 0 ), up( 0, 1, 0 );
  123.     VectorSubtract( CurrentViewOrigin(), vecOrigin, fwd );
  124.     float flDist = VectorNormalize( fwd );
  125.     if (flDist >= 1e-3)
  126.     {
  127.         CrossProduct( CurrentViewUp(), fwd, right );
  128.         flDist = VectorNormalize( right );
  129.         if (flDist >= 1e-3)
  130.         {
  131.             CrossProduct( fwd, right, up );
  132.         }
  133.         else
  134.         {
  135.             // In this case, fwd == g_vecVUp, it's right above or
  136.             // below us in screen space
  137.             CrossProduct( fwd, CurrentViewRight(), up );
  138.             VectorNormalize( up );
  139.             CrossProduct( up, fwd, right );
  140.         }
  141.     }
  142.  
  143.     CMeshBuilder meshBuilder;
  144.     Vector point;
  145.     CMatRenderContextPtr pRenderContext( materials );
  146.     IMesh* pMesh = pRenderContext->GetDynamicMesh( );
  147.  
  148.     meshBuilder.Begin( pMesh, MATERIAL_QUADS, 1 );
  149.  
  150.     meshBuilder.Color4ubv (pColor);
  151.     meshBuilder.TexCoord2f (0, 0, 1);
  152.     VectorMA (vecOrigin, -flHeight, up, point);
  153.     VectorMA (point, -flWidth, right, point);
  154.     meshBuilder.Position3fv (point.Base());
  155.     meshBuilder.AdvanceVertex();
  156.  
  157.     meshBuilder.Color4ubv (pColor);
  158.     meshBuilder.TexCoord2f (0, 0, 0);
  159.     VectorMA (vecOrigin, flHeight, up, point);
  160.     VectorMA (point, -flWidth, right, point);
  161.     meshBuilder.Position3fv (point.Base());
  162.     meshBuilder.AdvanceVertex();
  163.  
  164.     meshBuilder.Color4ubv (pColor);
  165.     meshBuilder.TexCoord2f (0, 1, 0);
  166.     VectorMA (vecOrigin, flHeight, up, point);
  167.     VectorMA (point, flWidth, right, point);
  168.     meshBuilder.Position3fv (point.Base());
  169.     meshBuilder.AdvanceVertex();
  170.  
  171.     meshBuilder.Color4ubv (pColor);
  172.     meshBuilder.TexCoord2f (0, 1, 1);
  173.     VectorMA (vecOrigin, -flHeight, up, point);
  174.     VectorMA (point, flWidth, right, point);
  175.     meshBuilder.Position3fv (point.Base());
  176.     meshBuilder.AdvanceVertex();
  177.    
  178.     meshBuilder.End();
  179.     pMesh->Draw();
  180. }
Advertisement
Add Comment
Please, Sign In to add comment