//==================================================================== // DebugDrawRangeArc //==================================================================== void CAIDebugRenderer::DrawRangeArc(const Vec3& vPos, const Vec3& vDir, float fAngle, float fRadius, float fWidth, const ColorB& colorFill, const ColorB& colorOutline, bool bDrawOutline) { const unsigned npts = 12; Vec3 points[npts]; Vec3 pointsOutline[npts]; Vec3 tris[(npts - 1) * 2 * 3]; Vec3 forw(vDir.x, vDir.y, 0.0f); forw.NormalizeSafe(); Vec3 right(forw.y, -forw.x, 0); if (fWidth > fRadius) fWidth = fRadius; for (unsigned int i = 0; i < npts; i++) { float a = ((float)i / (float)(npts - 1) - 0.5f) * fAngle; points[i] = forw * cosf(a) + right * sinf(a); pointsOutline[i] = vPos + points[i] * fRadius; } unsigned int n = 0; for (unsigned int i = 0; i < npts - 1; i++) { tris[n++] = vPos + points[i] * (fRadius - fWidth); tris[n++] = vPos + points[i+1] * fRadius; tris[n++] = vPos + points[i] * fRadius; tris[n++] = vPos + points[i] * (fRadius - fWidth); tris[n++] = vPos + points[i+1] * (fRadius - fWidth); tris[n++] = vPos + points[i+1] * fRadius; } DrawTriangles(tris, n, colorFill); if (bDrawOutline) { DrawPolyline(pointsOutline, npts, false, colorOutline); DrawLine(vPos + forw * (fRadius - fWidth/4), colorOutline, vPos + forw * (fRadius + fWidth/4), colorOutline); } }
forw_back_comp_id_t(uint8_t forw_comp_id,uint8_t back_comp_id) { forw()=forw_comp_id; back()=back_comp_id; }