#include "Render/Projection/ScreenGeometry.h" #include "Render/DX9/RendererDX9.h" #include "Render/Primitives/RenderPrimitivePool.h" #include "Render/Primitives/RenderQueues.h" #include "Render/Renderer.h" #include "Render/Primitives/TextureQuad.h" #include "Utility/Math/AffineMatrix.h" #include // OFFSET: 0x0054E2B0 // FUNCTION: fn_01951 void DrawScreenLine(ScreenPoint start, ScreenPoint end, int thickness, CTexture* texture, std::uint32_t color) { if (SquareRoot((end.y - start.y) * (end.y - start.y) + (end.x - start.x) * (end.x - start.x)) == 0.0f) { return; } const float deltaX = end.x - start.x; const float deltaY = end.y - start.y; const float inverseLength = 1.0f / SquareRoot(deltaY * deltaY + deltaX * deltaX); float angle = static_cast(std::acos(static_cast(inverseLength * deltaX))); if (inverseLength * deltaY < 0.0f) { angle = 6.283184f - angle; } angle += 1.570796f; const float width = static_cast(thickness); const float offsetY = ClientSin(angle) * width; const float offsetX = ClientCos(angle) * width; DrawScreenQuad( start.x - offsetX, start.y - offsetY, start.x + offsetX, start.y + offsetY, end.x - offsetX, end.y - offsetY, end.x + offsetX, end.y + offsetY, texture, color ); } // OFFSET: 0x0054DB40 // FUNCTION: fn_01944 void DrawScreenQuad(float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, CTexture* texture, std::uint32_t color) { RenderPrimitive* primitive = g_renderer->primitives.Acquire(); RenderVertex* vertices = primitive->vertices; vertices[0].x = x0; vertices[0].y = y0; vertices[0].z = 0.8f; vertices[0].rhw = 1.0f; vertices[0].diffuse = color; vertices[0].u = 0.0f; vertices[0].v = 0.0f; vertices[1].x = x1; vertices[1].y = y1; vertices[1].z = 0.8f; vertices[1].rhw = 1.0f; vertices[1].diffuse = color; vertices[1].u = 1.0f; vertices[1].v = 0.0f; vertices[2].x = x2; vertices[2].y = y2; vertices[2].z = 0.8f; vertices[2].rhw = 1.0f; vertices[2].diffuse = color; vertices[2].u = 0.0f; vertices[2].v = 1.0f; vertices[3].x = x3; vertices[3].y = y3; vertices[3].z = 0.8f; vertices[3].rhw = 1.0f; vertices[3].diffuse = color; vertices[3].u = 1.0f; vertices[3].v = 1.0f; primitive->texture = texture; primitive->sourceBlend = 2; primitive->destinationBlend = 4; static_cast(g_renderer)->Submit(primitive, 513); } // OFFSET: 0x00915F60 // FUNCTION: fn_12581 void DrawScreenQuad(ScreenPoint p0, ScreenPoint p1, ScreenPoint p2, ScreenPoint p3, CTexture* texture, std::uint32_t color) { RenderPrimitive* primitive = g_renderer->primitives.Acquire(); RenderVertex* vertices = primitive->vertices; vertices[0].x = p0.x; vertices[0].y = p0.y; vertices[0].z = 0.8f; vertices[0].rhw = 1.0f; vertices[0].diffuse = color; vertices[0].u = 0.0f; vertices[0].v = 0.0f; vertices[1].x = p1.x; vertices[1].y = p1.y; vertices[1].z = 0.8f; vertices[1].rhw = 1.0f; vertices[1].diffuse = color; vertices[1].u = 1.0f; vertices[1].v = 0.0f; vertices[2].x = p2.x; vertices[2].y = p2.y; vertices[2].z = 0.8f; vertices[2].rhw = 1.0f; vertices[2].diffuse = color; vertices[2].u = 0.0f; vertices[2].v = 1.0f; vertices[3].x = p3.x; vertices[3].y = p3.y; vertices[3].z = 0.8f; vertices[3].rhw = 1.0f; vertices[3].diffuse = color; vertices[3].u = 1.0f; vertices[3].v = 1.0f; primitive->texture = texture; primitive->sourceBlend = 2; primitive->destinationBlend = 4; static_cast(g_renderer)->Submit(primitive, 513); }