|
|
|
@ -182,53 +182,26 @@ void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color colo |
|
|
|
rlEnd(); |
|
|
|
} |
|
|
|
|
|
|
|
void DrawLineDashed(Vector2 startPos, Vector2 endPos, int dashSize, int whiteSpaceSize, Color color) |
|
|
|
// Draw a line defining thickness |
|
|
|
void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color) |
|
|
|
{ |
|
|
|
// Calculate the vector and length of the line |
|
|
|
float dx = endPos.x - startPos.x; |
|
|
|
float dy = endPos.y - startPos.y; |
|
|
|
float lineLength = sqrtf(dx*dx + dy*dy); |
|
|
|
|
|
|
|
// If the line is too short for dashing or dash size is invalid, draw a solid thick line |
|
|
|
if (lineLength < (dashSize + whiteSpaceSize) || dashSize <= 0) |
|
|
|
{ |
|
|
|
DrawLineV(startPos, endPos, color); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// Calculate the normalized direction vector of the line |
|
|
|
float invLineLength = 1 / lineLength; |
|
|
|
float dirX = dx * invLineLength; |
|
|
|
float dirY = dy * invLineLength; |
|
|
|
|
|
|
|
Vector2 currentPos = startPos; |
|
|
|
float distanceTraveled = 0; |
|
|
|
|
|
|
|
rlBegin(RL_LINES); |
|
|
|
rlColor4ub(color.r, color.g, color.b, color.a); |
|
|
|
Vector2 delta = { endPos.x - startPos.x, endPos.y - startPos.y }; |
|
|
|
float length = sqrtf(delta.x*delta.x + delta.y*delta.y); |
|
|
|
|
|
|
|
while (distanceTraveled < lineLength) |
|
|
|
if ((length > 0) && (thick > 0)) |
|
|
|
{ |
|
|
|
// Calculate the end of the current dash |
|
|
|
float dashEndDist = distanceTraveled + dashSize; |
|
|
|
if (dashEndDist > lineLength) |
|
|
|
{ |
|
|
|
dashEndDist = lineLength; |
|
|
|
} |
|
|
|
|
|
|
|
Vector2 dashEndPos = { startPos.x + dashEndDist * dirX, startPos.y + dashEndDist * dirY }; |
|
|
|
float scale = thick/(2*length); |
|
|
|
|
|
|
|
// Draw the dash segment |
|
|
|
rlVertex2f(currentPos.x, currentPos.y); |
|
|
|
rlVertex2f(dashEndPos.x, dashEndPos.y); |
|
|
|
Vector2 radius = { -scale*delta.y, scale*delta.x }; |
|
|
|
Vector2 strip[4] = { |
|
|
|
{ startPos.x - radius.x, startPos.y - radius.y }, |
|
|
|
{ startPos.x + radius.x, startPos.y + radius.y }, |
|
|
|
{ endPos.x - radius.x, endPos.y - radius.y }, |
|
|
|
{ endPos.x + radius.x, endPos.y + radius.y } |
|
|
|
}; |
|
|
|
|
|
|
|
// Update the distance traveled and move the current position for the next dash |
|
|
|
distanceTraveled = dashEndDist + whiteSpaceSize; |
|
|
|
currentPos.x = startPos.x + distanceTraveled * dirX; |
|
|
|
currentPos.y = startPos.y + distanceTraveled * dirY; |
|
|
|
DrawTriangleStrip(strip, 4, color); |
|
|
|
} |
|
|
|
|
|
|
|
rlEnd(); |
|
|
|
} |
|
|
|
|
|
|
|
// Draw a line (using gl lines) |
|
|
|
@ -295,26 +268,50 @@ void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color) |
|
|
|
DrawTriangleStrip(points, 2*SPLINE_SEGMENT_DIVISIONS + 2, color); |
|
|
|
} |
|
|
|
|
|
|
|
// Draw a line defining thickness |
|
|
|
void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color) |
|
|
|
// Draw a dashed line |
|
|
|
void DrawLineDashed(Vector2 startPos, Vector2 endPos, int dashSize, int spaceSize, Color color) |
|
|
|
{ |
|
|
|
Vector2 delta = { endPos.x - startPos.x, endPos.y - startPos.y }; |
|
|
|
float length = sqrtf(delta.x*delta.x + delta.y*delta.y); |
|
|
|
// Calculate the vector and length of the line |
|
|
|
float dx = endPos.x - startPos.x; |
|
|
|
float dy = endPos.y - startPos.y; |
|
|
|
float lineLength = sqrtf(dx*dx + dy*dy); |
|
|
|
|
|
|
|
if ((length > 0) && (thick > 0)) |
|
|
|
// If the line is too short for dashing or dash size is invalid, draw a solid thick line |
|
|
|
if ((lineLength < (dashSize + spaceSize)) || (dashSize <= 0)) |
|
|
|
{ |
|
|
|
float scale = thick/(2*length); |
|
|
|
DrawLineV(startPos, endPos, color); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
Vector2 radius = { -scale*delta.y, scale*delta.x }; |
|
|
|
Vector2 strip[4] = { |
|
|
|
{ startPos.x - radius.x, startPos.y - radius.y }, |
|
|
|
{ startPos.x + radius.x, startPos.y + radius.y }, |
|
|
|
{ endPos.x - radius.x, endPos.y - radius.y }, |
|
|
|
{ endPos.x + radius.x, endPos.y + radius.y } |
|
|
|
}; |
|
|
|
// Calculate the normalized direction vector of the line |
|
|
|
float invLineLength = 1.0f/lineLength; |
|
|
|
float dirX = dx*invLineLength; |
|
|
|
float dirY = dy*invLineLength; |
|
|
|
|
|
|
|
DrawTriangleStrip(strip, 4, color); |
|
|
|
} |
|
|
|
Vector2 currentPos = startPos; |
|
|
|
float distanceTraveled = 0; |
|
|
|
|
|
|
|
rlBegin(RL_LINES); |
|
|
|
rlColor4ub(color.r, color.g, color.b, color.a); |
|
|
|
|
|
|
|
while (distanceTraveled < lineLength) |
|
|
|
{ |
|
|
|
// Calculate the end of the current dash |
|
|
|
float dashEndDist = distanceTraveled + dashSize; |
|
|
|
if (dashEndDist > lineLength) dashEndDist = lineLength; |
|
|
|
|
|
|
|
Vector2 dashEndPos = { startPos.x + dashEndDist*dirX, startPos.y + dashEndDist*dirY }; |
|
|
|
|
|
|
|
// Draw the dash segment |
|
|
|
rlVertex2f(currentPos.x, currentPos.y); |
|
|
|
rlVertex2f(dashEndPos.x, dashEndPos.y); |
|
|
|
|
|
|
|
// Update the distance traveled and move the current position for the next dash |
|
|
|
distanceTraveled = dashEndDist + spaceSize; |
|
|
|
currentPos.x = startPos.x + distanceTraveled*dirX; |
|
|
|
currentPos.y = startPos.y + distanceTraveled*dirY; |
|
|
|
} |
|
|
|
rlEnd(); |
|
|
|
} |
|
|
|
|
|
|
|
// Draw a color-filled circle |
|
|
|
|