|
|
@ -101,15 +101,18 @@ int main(void) |
|
|
|
} |
|
|
|
|
|
|
|
// Spline point focus and selection logic |
|
|
|
for (int i = 0; i < pointCount; i++) |
|
|
|
if ((selectedPoint == -1) && ((splineTypeActive != SPLINE_BEZIER) || (selectedControlPoint == NULL))) |
|
|
|
{ |
|
|
|
if (CheckCollisionPointCircle(GetMousePosition(), points[i], 8.0f)) |
|
|
|
focusedPoint = -1; |
|
|
|
for (int i = 0; i < pointCount; i++) |
|
|
|
{ |
|
|
|
focusedPoint = i; |
|
|
|
if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) selectedPoint = i; |
|
|
|
break; |
|
|
|
if (CheckCollisionPointCircle(GetMousePosition(), points[i], 8.0f)) |
|
|
|
{ |
|
|
|
focusedPoint = i; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
else focusedPoint = -1; |
|
|
|
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) selectedPoint = focusedPoint; |
|
|
|
} |
|
|
|
|
|
|
|
// Spline point movement logic |
|
|
@ -123,21 +126,23 @@ int main(void) |
|
|
|
if ((splineTypeActive == SPLINE_BEZIER) && (focusedPoint == -1)) |
|
|
|
{ |
|
|
|
// Spline control point focus and selection logic |
|
|
|
for (int i = 0; i < pointCount - 1; i++) |
|
|
|
if (selectedControlPoint == NULL) |
|
|
|
{ |
|
|
|
if (CheckCollisionPointCircle(GetMousePosition(), control[i].start, 6.0f)) |
|
|
|
{ |
|
|
|
focusedControlPoint = &control[i].start; |
|
|
|
if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) selectedControlPoint = &control[i].start; |
|
|
|
break; |
|
|
|
} |
|
|
|
else if (CheckCollisionPointCircle(GetMousePosition(), control[i].end, 6.0f)) |
|
|
|
focusedControlPoint = NULL; |
|
|
|
for (int i = 0; i < pointCount - 1; i++) |
|
|
|
{ |
|
|
|
focusedControlPoint = &control[i].end; |
|
|
|
if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) selectedControlPoint = &control[i].end; |
|
|
|
break; |
|
|
|
if (CheckCollisionPointCircle(GetMousePosition(), control[i].start, 6.0f)) |
|
|
|
{ |
|
|
|
focusedControlPoint = &control[i].start; |
|
|
|
break; |
|
|
|
} |
|
|
|
else if (CheckCollisionPointCircle(GetMousePosition(), control[i].end, 6.0f)) |
|
|
|
{ |
|
|
|
focusedControlPoint = &control[i].end; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
else focusedControlPoint = NULL; |
|
|
|
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) selectedControlPoint = focusedControlPoint; |
|
|
|
} |
|
|
|
|
|
|
|
// Spline control point movement logic |
|
|
@ -153,6 +158,9 @@ int main(void) |
|
|
|
else if (IsKeyPressed(KEY_TWO)) splineTypeActive = 1; |
|
|
|
else if (IsKeyPressed(KEY_THREE)) splineTypeActive = 2; |
|
|
|
else if (IsKeyPressed(KEY_FOUR)) splineTypeActive = 3; |
|
|
|
|
|
|
|
// Clear selection when changing to a spline without control points |
|
|
|
if (IsKeyPressed(KEY_ONE) || IsKeyPressed(KEY_TWO) || IsKeyPressed(KEY_THREE)) selectedControlPoint = NULL; |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Draw |
|
|
@ -249,7 +257,7 @@ int main(void) |
|
|
|
} |
|
|
|
|
|
|
|
// Check all possible UI states that require controls lock |
|
|
|
if (splineTypeEditMode) GuiLock(); |
|
|
|
if (splineTypeEditMode || (selectedPoint != -1) || (selectedControlPoint != NULL)) GuiLock(); |
|
|
|
|
|
|
|
// Draw spline config |
|
|
|
GuiLabel((Rectangle){ 12, 62, 140, 24 }, TextFormat("Spline thickness: %i", (int)splineThickness)); |
|
|
@ -257,10 +265,12 @@ int main(void) |
|
|
|
|
|
|
|
GuiCheckBox((Rectangle){ 12, 110, 20, 20 }, "Show point helpers", &splineHelpersActive); |
|
|
|
|
|
|
|
GuiUnlock(); |
|
|
|
k">if (splineTypeEditMode) GuiUnlock(); |
|
|
|
|
|
|
|
GuiLabel((Rectangle){ 12, 10, 140, 24 }, "Spline type:"); |
|
|
|
if (GuiDropdownBox((Rectangle){ 12, 8 + 24, 140, 28 }, "LINEAR;BSPLINE;CATMULLROM;BEZIER", &splineTypeActive, splineTypeEditMode)) splineTypeEditMode = !splineTypeEditMode; |
|
|
|
|
|
|
|
GuiUnlock(); |
|
|
|
|
|
|
|
EndDrawing(); |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|