Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. bool ScreenTransformD3D(const Vector& vOrigin, Vector& vOut)
  2. {
  3. bool behind = true;;
  4. float width;
  5.  
  6. //const D3DXMATRIX& WorldToScreen = *(D3DXMATRIX*)(*(PDWORD)(pOffset->dwMatrixOffset)+988);
  7.  
  8. // DWORD MM = (DWORD)&pEngine->WorldToScreenMatrix();
  9. // pOffset->dwMatrixOffset = (MM + 0x40);
  10.  
  11. D3DXMATRIX * pWorldToScreen = nullptr;// *(D3DXMATRIX*)(*(PDWORD)(pOffset->dwMatrixOffset) + 988);
  12.  
  13.  
  14. static float* ViewMatrixOld = nullptr;
  15. // float* ViewMatrix = nullptr;
  16.  
  17. if (!ViewMatrixOld)
  18. {
  19. ViewMatrixOld = GetW2SEngine();
  20. }
  21. else
  22. {
  23. pWorldToScreen = (D3DXMATRIX*)(*(PDWORD)(ViewMatrixOld)+0x3DC);
  24. if ((DWORD)pWorldToScreen <= (DWORD) GetModuleHandle(0))
  25. {
  26. pWorldToScreen = nullptr;
  27. ViewMatrixOld = GetW2SEngine();
  28. ConColorMsg(Color::Red(), "[WARNING] D3D Matrix failed! %X\n", pWorldToScreen);
  29. }
  30. // else
  31. // Utils::DebugMSG("%x", &*pWorldToScreen);
  32. }
  33.  
  34. if (pWorldToScreen && *pWorldToScreen)
  35. {
  36. D3DXMATRIX W2S = *pWorldToScreen;
  37.  
  38. vOut.X = W2S._11 * vOrigin.X + W2S._12 * vOrigin.Y + W2S._13 * vOrigin.Z + W2S._14;
  39. vOut.Y = W2S._21 * vOrigin.X + W2S._22 * vOrigin.Y + W2S._23 * vOrigin.Z + W2S._24;
  40.  
  41. width = W2S._41 * vOrigin.X + W2S._42 * vOrigin.Y + W2S._43 * vOrigin.Z + W2S._44;
  42.  
  43. vOut.Z = 0;
  44.  
  45. if (width < 0.001f)
  46. {
  47. behind = true;
  48.  
  49. vOut.X *= 100000;
  50. vOut.Y *= 100000;
  51. }
  52. else
  53. {
  54. behind = false;
  55.  
  56. float invWidth = 1.0 / width;
  57.  
  58. vOut.X *= invWidth;
  59. vOut.Y *= invWidth;
  60. }
  61.  
  62. }
  63.  
  64. return behind;
  65. }
  66.  
  67. bool ScreenTransform(const Vector& point, Vector& screen)
  68. {
  69. // if (nTransformType == RENDERTYPES::ENGINE)
  70. //return ScreenTransformEngine(point, screen);
  71.  
  72. // if (nTransformType == RENDERTYPES::D3D)
  73. return ScreenTransformD3D(point, screen);
  74.  
  75. return false;
  76. }
  77.  
  78. bool WorldToScreen(CONST Vector &origin, OUT Vector &screen)
  79. {
  80. //return !pDebugOverlay->ScreenPosition(origin, screen);
  81.  
  82. BOOL bRet = FALSE;
  83.  
  84. if (!ScreenTransform(origin, screen))
  85. {
  86. INT width, height;
  87. pEngine->GetScreenSize(width, height);
  88.  
  89. fScreenX = width / 2;
  90. fScreenY = height / 2;
  91.  
  92. fScreenX += 0.5f * screen.X * width + 0.5f;
  93. fScreenY -= 0.5f * screen.Y * height + 0.5f;
  94.  
  95. screen.X = fScreenX;
  96. screen.Y = fScreenY;
  97.  
  98. bRet = TRUE;
  99. }
  100.  
  101. return bRet;
  102. }
  103.  
  104.  
  105.  
  106. for (int i = 0; i <= pEntityList()->GetHigestEntityIndex(); i++)
  107. {
  108. CBaseEntity* pEntity = (CBaseEntity*)pEntityList()->GetClientEntity(i);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement