summaryrefslogtreecommitdiffhomepage
path: root/src/shapes.c
diff options
context:
space:
mode:
authorRay <[email protected]>2017-03-26 23:06:17 +0200
committerGitHub <[email protected]>2017-03-26 23:06:17 +0200
commit5338bbf70d3e2c71fcbd0db54e14b6cf2d5616c3 (patch)
treec3a808940096983ca9753ad0d546d1567be2120b /src/shapes.c
parent2c0604aa29c720de03797ed102dfa3fe7f05f9b5 (diff)
parent90b36bd274d523eb54700f71069558b15731adb0 (diff)
downloadraylib-5338bbf70d3e2c71fcbd0db54e14b6cf2d5616c3.tar.gz
raylib-5338bbf70d3e2c71fcbd0db54e14b6cf2d5616c3.zip
Merge pull request #250 from raysan5/develop
Integrate develop branch
Diffstat (limited to 'src/shapes.c')
-rw-r--r--src/shapes.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/src/shapes.c b/src/shapes.c
index 9cbe1da4..2a924476 100644
--- a/src/shapes.c
+++ b/src/shapes.c
@@ -13,7 +13,7 @@
*
* LICENSE: zlib/libpng
*
-* Copyright (c) 2014-2016 Ramon Santamaria (@raysan5)
+* Copyright (c) 2014-2017 Ramon Santamaria (@raysan5)
*
* This software is provided "as-is", without any express or implied warranty. In no event
* will the authors be held liable for any damages arising from the use of this software.
@@ -57,7 +57,7 @@
//----------------------------------------------------------------------------------
// Module specific Functions Declaration
//----------------------------------------------------------------------------------
-// No private (static) functions in this module (.c file)
+static float EaseCubicInOut(float t, float b, float c, float d); // Cubic easing
//----------------------------------------------------------------------------------
// Module Functions Definition
@@ -106,6 +106,13 @@ void DrawLineV(Vector2 startPos, Vector2 endPos, Color color)
// Draw a line defining thickness
void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color)
{
+ if (startPos.x > endPos.x)
+ {
+ Vector2 tempPos = startPos;
+ startPos = endPos;
+ endPos = tempPos;
+ }
+
float dx = endPos.x - startPos.x;
float dy = endPos.y - startPos.y;
@@ -133,6 +140,27 @@ void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color)
rlDisableTexture();
}
+// Draw line using cubic-bezier curves in-out
+void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color)
+{
+ #define LINE_DIVISIONS 24 // Bezier line divisions
+
+ Vector2 previous = startPos;
+ Vector2 current;
+
+ for (int i = 1; i <= LINE_DIVISIONS; i++)
+ {
+ // Cubic easing in-out
+ // NOTE: Easing is calcutated only for y position value
+ current.y = EaseCubicInOut(i, startPos.y, endPos.y - startPos.y, LINE_DIVISIONS);
+ current.x = previous.x + (endPos.x - startPos.x)/LINE_DIVISIONS;
+
+ DrawLineEx(previous, current, thick, color);
+
+ previous = current;
+ }
+}
+
// Draw a color-filled circle
void DrawCircle(int centerX, int centerY, float radius, Color color)
{
@@ -590,3 +618,15 @@ Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2)
return retRec;
}
+
+//----------------------------------------------------------------------------------
+// Module specific Functions Definition
+//----------------------------------------------------------------------------------
+
+// Cubic easing in-out
+// NOTE: Required for DrawLineBezier()
+static float EaseCubicInOut(float t, float b, float c, float d)
+{
+ if ((t/=d/2) < 1) return (c/2*t*t*t + b);
+ return (c/2*((t-=2)*t*t + 2) + b);
+} \ No newline at end of file