summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--API.md110
-rw-r--r--ReiLua_API.lua135
-rw-r--r--changelog1
-rw-r--r--include/shapes.h17
-rw-r--r--src/core.c2
-rw-r--r--src/lua_core.c17
-rw-r--r--src/shapes.c283
7 files changed, 562 insertions, 3 deletions
diff --git a/API.md b/API.md
index 8c79c10..2c0618e 100644
--- a/API.md
+++ b/API.md
@@ -4168,7 +4168,7 @@ Get a random value between min and max (both included)
---
-> sequence = RL.GetRandomValue( int count, int min, int max )
+> sequence = RL.LoadRandomSequence( int count, int min, int max )
Load random values sequence, no values repeated
@@ -5259,6 +5259,114 @@ Draw a polygon outline of n sides with extended parameters
---
+## Shapes - Splines drawing functions
+
+---
+
+> RL.DrawSplineLinear( Vector2{} points, float thick, Color color )
+
+Draw spline: Linear, minimum 2 points
+
+---
+
+> RL.DrawSplineBasis( Vector2{} points, float thick, Color color )
+
+Draw spline: B-Spline, minimum 4 points
+
+---
+
+> RL.DrawSplineCatmullRom( Vector2{} points, float thick, Color color )
+
+Draw spline: Catmull-Rom, minimum 4 points
+
+---
+
+> RL.DrawSplineBezierQuadratic( Vector2{} points, float thick, Color color )
+
+Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]
+
+---
+
+> RL.DrawSplineBezierCubic( Vector2{} points, float thick, Color color )
+
+Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]
+
+---
+
+> RL.DrawSplineSegmentLinear( Vector2 p1, Vector2 p2, float thick, Color color )
+
+Draw spline segment: Linear, 2 points
+
+---
+
+> RL.DrawSplineSegmentBasis( Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color )
+
+Draw spline segment: B-Spline, 4 points
+
+---
+
+> RL.DrawSplineSegmentCatmullRom( Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color )
+
+Draw spline segment: Catmull-Rom, 4 points
+
+---
+
+> RL.DrawSplineSegmentBezierQuadratic( Vector2 p1, Vector2 c2, Vector2 p3, float thick, Color color )
+
+Draw spline segment: Quadratic Bezier, 2 points, 1 control point
+
+---
+
+> RL.DrawSplineSegmentBezierCubic( Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float thick, Color color )
+
+Draw spline segment: Cubic Bezier, 2 points, 2 control points
+
+---
+
+## Shapes - Spline segment point evaluation functions, for a given t [0.0f .. 1.0f]
+
+---
+
+> point = RL.GetSplinePointLinear( Vector2 startPos, Vector2 endPos, float t )
+
+Get (evaluate) spline point: Linear
+
+- Success return Vector2
+
+---
+
+> point = RL.GetSplinePointBasis( Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t )
+
+Get (evaluate) spline point: B-Spline
+
+- Success return Vector2
+
+---
+
+> point = RL.GetSplinePointCatmullRom( Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t )
+
+Get (evaluate) spline point: Catmull-Rom
+
+- Success return Vector2
+
+---
+
+> point = RL.GetSplinePointBezierQuad( Vector2 p1, Vector2 c2, Vector2 p3, float t )
+
+Get (evaluate) spline point: Quadratic Bezier
+
+- Success return Vector2
+
+---
+
+> point = RL.GetSplinePointBezierCubic( Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t )
+
+Get (evaluate) spline point: Cubic Bezier
+
+- Success return Vector2
+
+---
+
## Shapes - Basic shapes collision detection functions
---
diff --git a/ReiLua_API.lua b/ReiLua_API.lua
index 9967616..89c7aa7 100644
--- a/ReiLua_API.lua
+++ b/ReiLua_API.lua
@@ -1695,7 +1695,7 @@ function RL.GetRandomValue( min, max ) end
---@param min integer
---@param max integer
---@return any sequence
-function RL.GetRandomValue( count, min, max ) end
+function RL.LoadRandomSequence( count, min, max ) end
-- Core - Misc
@@ -2640,6 +2640,139 @@ function RL.DrawPolyLines( center, sides, radius, rotation, color ) end
---@return any RL.DrawPolyLinesEx
function RL.DrawPolyLinesEx( center, sides, radius, rotation, lineThick, color ) end
+-- Shapes - Splines drawing functions
+
+---Draw spline: Linear, minimum 2 points
+---@param points table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineLinear
+function RL.DrawSplineLinear( points, thick, color ) end
+
+---Draw spline: B-Spline, minimum 4 points
+---@param points table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineBasis
+function RL.DrawSplineBasis( points, thick, color ) end
+
+---Draw spline: Catmull-Rom, minimum 4 points
+---@param points table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineCatmullRom
+function RL.DrawSplineCatmullRom( points, thick, color ) end
+
+---Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]
+---@param points table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineBezierQuadratic
+function RL.DrawSplineBezierQuadratic( points, thick, color ) end
+
+---Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]
+---@param points table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineBezierCubic
+function RL.DrawSplineBezierCubic( points, thick, color ) end
+
+---Draw spline segment: Linear, 2 points
+---@param p1 table
+---@param p2 table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineSegmentLinear
+function RL.DrawSplineSegmentLinear( p1, p2, thick, color ) end
+
+---Draw spline segment: B-Spline, 4 points
+---@param p1 table
+---@param p2 table
+---@param p3 table
+---@param p4 table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineSegmentBasis
+function RL.DrawSplineSegmentBasis( p1, p2, p3, p4, thick, color ) end
+
+---Draw spline segment: Catmull-Rom, 4 points
+---@param p1 table
+---@param p2 table
+---@param p3 table
+---@param p4 table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineSegmentCatmullRom
+function RL.DrawSplineSegmentCatmullRom( p1, p2, p3, p4, thick, color ) end
+
+---Draw spline segment: Quadratic Bezier, 2 points, 1 control point
+---@param p1 table
+---@param c2 table
+---@param p3 table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineSegmentBezierQuadratic
+function RL.DrawSplineSegmentBezierQuadratic( p1, c2, p3, thick, color ) end
+
+---Draw spline segment: Cubic Bezier, 2 points, 2 control points
+---@param p1 table
+---@param c2 table
+---@param c3 table
+---@param p4 table
+---@param thick number
+---@param color table
+---@return any RL.DrawSplineSegmentBezierCubic
+function RL.DrawSplineSegmentBezierCubic( p1, c2, c3, p4, thick, color ) end
+
+-- Shapes - Spline segment point evaluation functions, for a given t [0.0f .. 1.0f]
+
+---Get (evaluate) spline point: Linear
+---- Success return Vector2
+---@param startPos table
+---@param endPos table
+---@param t number
+---@return any point
+function RL.GetSplinePointLinear( startPos, endPos, t ) end
+
+---Get (evaluate) spline point: B-Spline
+---- Success return Vector2
+---@param p1 table
+---@param p2 table
+---@param p3 table
+---@param p4 table
+---@param t number
+---@return any point
+function RL.GetSplinePointBasis( p1, p2, p3, p4, t ) end
+
+---Get (evaluate) spline point: Catmull-Rom
+---- Success return Vector2
+---@param p1 table
+---@param p2 table
+---@param p3 table
+---@param p4 table
+---@param t number
+---@return any point
+function RL.GetSplinePointCatmullRom( p1, p2, p3, p4, t ) end
+
+---Get (evaluate) spline point: Quadratic Bezier
+---- Success return Vector2
+---@param p1 table
+---@param c2 table
+---@param p3 table
+---@param t number
+---@return any point
+function RL.GetSplinePointBezierQuad( p1, c2, p3, t ) end
+
+---Get (evaluate) spline point: Cubic Bezier
+---- Success return Vector2
+---@param p1 table
+---@param c2 table
+---@param c3 table
+---@param p4 table
+---@param t number
+---@return any point
+function RL.GetSplinePointBezierCubic( p1, c2, c3, p4, t ) end
+
-- Shapes - Basic shapes collision detection functions
---Check collision between two rectangles
diff --git a/changelog b/changelog
index aa23a70..37670c9 100644
--- a/changelog
+++ b/changelog
@@ -7,6 +7,7 @@ KEY CHANGES:
- ADDED: More audio device management functions.
- ADDED: Random values generation functions.
- ADDED: More Window-related functions.
+ - ADDED: Spline functions.
DETAILED CHANGES:
- REMOVED: DrawLineBezierQuad, DrawLineBezierCubic.
diff --git a/include/shapes.h b/include/shapes.h
index 50fb156..92c0f97 100644
--- a/include/shapes.h
+++ b/include/shapes.h
@@ -31,6 +31,23 @@ int lshapesDrawTriangleStrip( lua_State *L );
int lshapesDrawPoly( lua_State *L );
int lshapesDrawPolyLines( lua_State *L );
int lshapesDrawPolyLinesEx( lua_State *L );
+/* Splines drawing functions. */
+int lshapesDrawSplineLinear( lua_State *L );
+int lshapesDrawSplineBasis( lua_State *L );
+int lshapesDrawSplineCatmullRom( lua_State *L );
+int lshapesDrawSplineBezierQuadratic( lua_State *L );
+int lshapesDrawSplineBezierCubic( lua_State *L );
+int lshapesDrawSplineSegmentLinear( lua_State *L );
+int lshapesDrawSplineSegmentBasis( lua_State *L );
+int lshapesDrawSplineSegmentCatmullRom( lua_State *L );
+int lshapesDrawSplineSegmentBezierQuadratic( lua_State *L );
+int lshapesDrawSplineSegmentBezierCubic( lua_State *L );
+/* Basic Spline segment point evaluation functions, for a given t [0.0f .. 1.0f]. */
+int lshapesGetSplinePointLinear( lua_State *L );
+int lshapesGetSplinePointBasis( lua_State *L );
+int lshapesGetSplinePointCatmullRom( lua_State *L );
+int lshapesGetSplinePointBezierQuad( lua_State *L );
+int lshapesGetSplinePointBezierCubic( lua_State *L );
/* Basic shapes collision detection functions. */
int lshapesCheckCollisionRecs( lua_State *L );
int lshapesCheckCollisionCircles( lua_State *L );
diff --git a/src/core.c b/src/core.c
index 2ad6bf8..dc97f06 100644
--- a/src/core.c
+++ b/src/core.c
@@ -1278,7 +1278,7 @@ int lcoreGetRandomValue( lua_State *L ) {
}
/*
-> sequence = RL.GetRandomValue( int count, int min, int max )
+> sequence = RL.LoadRandomSequence( int count, int min, int max )
Load random values sequence, no values repeated
diff --git a/src/lua_core.c b/src/lua_core.c
index 40bb0c4..c85d541 100644
--- a/src/lua_core.c
+++ b/src/lua_core.c
@@ -1771,6 +1771,23 @@ void luaRegister() {
assingGlobalFunction( "DrawPoly", lshapesDrawPoly );
assingGlobalFunction( "DrawPolyLines", lshapesDrawPolyLines );
assingGlobalFunction( "DrawPolyLinesEx", lshapesDrawPolyLinesEx );
+ /* Splines drawing functions. */
+ assingGlobalFunction( "DrawSplineLinear", lshapesDrawSplineLinear );
+ assingGlobalFunction( "DrawSplineBasis", lshapesDrawSplineBasis );
+ assingGlobalFunction( "DrawSplineCatmullRom", lshapesDrawSplineCatmullRom );
+ assingGlobalFunction( "DrawSplineBezierQuadratic", lshapesDrawSplineBezierQuadratic );
+ assingGlobalFunction( "DrawSplineBezierCubic", lshapesDrawSplineBezierCubic );
+ assingGlobalFunction( "DrawSplineSegmentLinear", lshapesDrawSplineSegmentLinear );
+ assingGlobalFunction( "DrawSplineSegmentBasis", lshapesDrawSplineSegmentBasis );
+ assingGlobalFunction( "DrawSplineSegmentCatmullRom", lshapesDrawSplineSegmentCatmullRom );
+ assingGlobalFunction( "DrawSplineSegmentBezierQuadratic", lshapesDrawSplineSegmentBezierQuadratic );
+ assingGlobalFunction( "DrawSplineSegmentBezierCubic", lshapesDrawSplineSegmentBezierCubic );
+ /* Basic Spline segment point evaluation functions, for a given t [0.0f .. 1.0f]. */
+ assingGlobalFunction( "GetSplinePointLinear", lshapesGetSplinePointLinear );
+ assingGlobalFunction( "GetSplinePointBasis", lshapesGetSplinePointBasis );
+ assingGlobalFunction( "GetSplinePointCatmullRom", lshapesGetSplinePointCatmullRom );
+ assingGlobalFunction( "GetSplinePointBezierQuad", lshapesGetSplinePointBezierQuad );
+ assingGlobalFunction( "GetSplinePointBezierCubic", lshapesGetSplinePointBezierCubic );
/* Basic shapes collision detection functions. */
assingGlobalFunction( "CheckCollisionRecs", lshapesCheckCollisionRecs );
assingGlobalFunction( "CheckCollisionCircles", lshapesCheckCollisionCircles );
diff --git a/src/shapes.c b/src/shapes.c
index 80e5f05..ad8ed92 100644
--- a/src/shapes.c
+++ b/src/shapes.c
@@ -4,6 +4,17 @@
#include "lua_core.h"
#include "textures.h"
+static inline void getVector2Array( lua_State *L, int index, Vector2 points[] ) {
+ int t = index, i = 0;
+ lua_pushnil( L );
+
+ while ( lua_next( L, t ) != 0 ) {
+ points[i] = uluaGetVector2( L, lua_gettop( L ) );
+ i++;
+ lua_pop( L, 1 );
+ }
+}
+
/*
## Shapes - Basic shapes drawing functions
*/
@@ -521,6 +532,278 @@ int lshapesDrawPolyLinesEx( lua_State *L ) {
}
/*
+## Shapes - Splines drawing functions
+*/
+
+/*
+> RL.DrawSplineLinear( Vector2{} points, float thick, Color color )
+
+Draw spline: Linear, minimum 2 points
+*/
+int lshapesDrawSplineLinear( lua_State *L ) {
+ int pointCount = uluaGetTableLen( L, 1 );
+ Vector2 points[ pointCount ];
+ float thick = luaL_checknumber( L, 2 );
+ Color color = uluaGetColor( L, 3 );
+
+ getVector2Array( L, 1, points );
+ DrawSplineLinear( points, pointCount, thick, color );
+
+ return 0;
+}
+
+/*
+> RL.DrawSplineBasis( Vector2{} points, float thick, Color color )
+
+Draw spline: B-Spline, minimum 4 points
+*/
+int lshapesDrawSplineBasis( lua_State *L ) {
+ int pointCount = uluaGetTableLen( L, 1 );
+ Vector2 points[ pointCount ];
+ float thick = luaL_checknumber( L, 2 );
+ Color color = uluaGetColor( L, 3 );
+
+ getVector2Array( L, 1, points );
+ DrawSplineBasis( points, pointCount, thick, color );
+
+ return 0;
+}
+
+/*
+> RL.DrawSplineCatmullRom( Vector2{} points, float thick, Color color )
+
+Draw spline: Catmull-Rom, minimum 4 points
+*/
+int lshapesDrawSplineCatmullRom( lua_State *L ) {
+ int pointCount = uluaGetTableLen( L, 1 );
+ Vector2 points[ pointCount ];
+ float thick = luaL_checknumber( L, 2 );
+ Color color = uluaGetColor( L, 3 );
+
+ getVector2Array( L, 1, points );
+ DrawSplineCatmullRom( points, pointCount, thick, color );
+
+ return 0;
+}
+
+/*
+> RL.DrawSplineBezierQuadratic( Vector2{} points, float thick, Color color )
+
+Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]
+*/
+int lshapesDrawSplineBezierQuadratic( lua_State *L ) {
+ int pointCount = uluaGetTableLen( L, 1 );
+ Vector2 points[ pointCount ];
+ float thick = luaL_checknumber( L, 2 );
+ Color color = uluaGetColor( L, 3 );
+
+ getVector2Array( L, 1, points );
+ DrawSplineBezierQuadratic( points, pointCount, thick, color );
+
+ return 0;
+}
+
+/*
+> RL.DrawSplineBezierCubic( Vector2{} points, float thick, Color color )
+
+Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]
+*/
+int lshapesDrawSplineBezierCubic( lua_State *L ) {
+ int pointCount = uluaGetTableLen( L, 1 );
+ Vector2 points[ pointCount ];
+ float thick = luaL_checknumber( L, 2 );
+ Color color = uluaGetColor( L, 3 );
+
+ getVector2Array( L, 1, points );
+ DrawSplineBezierCubic( points, pointCount, thick, color );
+
+ return 0;
+}
+
+/*
+> RL.DrawSplineSegmentLinear( Vector2 p1, Vector2 p2, float thick, Color color )
+
+Draw spline segment: Linear, 2 points
+*/
+int lshapesDrawSplineSegmentLinear( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 p2 = uluaGetVector2( L, 2 );
+ float thick = luaL_checknumber( L, 3 );
+ Color color = uluaGetColor( L, 4 );
+
+ DrawSplineSegmentLinear( p1, p2, thick, color );
+
+ return 0;
+}
+
+/*
+> RL.DrawSplineSegmentBasis( Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color )
+
+Draw spline segment: B-Spline, 4 points
+*/
+int lshapesDrawSplineSegmentBasis( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 p2 = uluaGetVector2( L, 2 );
+ Vector2 p3 = uluaGetVector2( L, 3 );
+ Vector2 p4 = uluaGetVector2( L, 4 );
+ float thick = luaL_checknumber( L, 5 );
+ Color color = uluaGetColor( L, 6 );
+
+ DrawSplineSegmentBasis( p1, p2, p3, p4, thick, color );
+
+ return 0;
+}
+
+/*
+> RL.DrawSplineSegmentCatmullRom( Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color )
+
+Draw spline segment: Catmull-Rom, 4 points
+*/
+int lshapesDrawSplineSegmentCatmullRom( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 p2 = uluaGetVector2( L, 2 );
+ Vector2 p3 = uluaGetVector2( L, 3 );
+ Vector2 p4 = uluaGetVector2( L, 4 );
+ float thick = luaL_checknumber( L, 5 );
+ Color color = uluaGetColor( L, 6 );
+
+ DrawSplineSegmentCatmullRom( p1, p2, p3, p4, thick, color );
+
+ return 0;
+}
+
+/*
+> RL.DrawSplineSegmentBezierQuadratic( Vector2 p1, Vector2 c2, Vector2 p3, float thick, Color color )
+
+Draw spline segment: Quadratic Bezier, 2 points, 1 control point
+*/
+int lshapesDrawSplineSegmentBezierQuadratic( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 c2 = uluaGetVector2( L, 2 );
+ Vector2 p3 = uluaGetVector2( L, 3 );
+ float thick = luaL_checknumber( L, 4 );
+ Color color = uluaGetColor( L, 5 );
+
+ DrawSplineSegmentBezierQuadratic( p1, c2, p3, thick, color );
+
+ return 0;
+}
+
+/*
+> RL.DrawSplineSegmentBezierCubic( Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float thick, Color color )
+
+Draw spline segment: Cubic Bezier, 2 points, 2 control points
+*/
+int lshapesDrawSplineSegmentBezierCubic( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 c2 = uluaGetVector2( L, 2 );
+ Vector2 c3 = uluaGetVector2( L, 3 );
+ Vector2 p4 = uluaGetVector2( L, 4 );
+ float thick = luaL_checknumber( L, 5 );
+ Color color = uluaGetColor( L, 6 );
+
+ DrawSplineSegmentBezierCubic( p1, c2, c3, p4, thick, color );
+
+ return 0;
+}
+
+/*
+## Shapes - Spline segment point evaluation functions, for a given t [0.0f .. 1.0f]
+*/
+
+/*
+> point = RL.GetSplinePointLinear( Vector2 startPos, Vector2 endPos, float t )
+
+Get (evaluate) spline point: Linear
+
+- Success return Vector2
+*/
+int lshapesGetSplinePointLinear( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 p2 = uluaGetVector2( L, 2 );
+ float t = luaL_checknumber( L, 3 );
+
+ uluaPushVector2( L, GetSplinePointLinear( p1, p2, t ) );
+
+ return 1;
+}
+
+/*
+> point = RL.GetSplinePointBasis( Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t )
+
+Get (evaluate) spline point: B-Spline
+
+- Success return Vector2
+*/
+int lshapesGetSplinePointBasis( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 p2 = uluaGetVector2( L, 2 );
+ Vector2 p3 = uluaGetVector2( L, 3 );
+ Vector2 p4 = uluaGetVector2( L, 4 );
+ float t = luaL_checknumber( L, 5 );
+
+ uluaPushVector2( L, GetSplinePointBasis( p1, p2, p3, p4, t ) );
+
+ return 1;
+}
+
+/*
+> point = RL.GetSplinePointCatmullRom( Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t )
+
+Get (evaluate) spline point: Catmull-Rom
+
+- Success return Vector2
+*/
+int lshapesGetSplinePointCatmullRom( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 p2 = uluaGetVector2( L, 2 );
+ Vector2 p3 = uluaGetVector2( L, 3 );
+ Vector2 p4 = uluaGetVector2( L, 4 );
+ float t = luaL_checknumber( L, 5 );
+
+ uluaPushVector2( L, GetSplinePointCatmullRom( p1, p2, p3, p4, t ) );
+
+ return 1;
+}
+
+/*
+> point = RL.GetSplinePointBezierQuad( Vector2 p1, Vector2 c2, Vector2 p3, float t )
+
+Get (evaluate) spline point: Quadratic Bezier
+
+- Success return Vector2
+*/
+int lshapesGetSplinePointBezierQuad( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 c2 = uluaGetVector2( L, 2 );
+ Vector2 p3 = uluaGetVector2( L, 3 );
+ float t = luaL_checknumber( L, 4 );
+
+ uluaPushVector2( L, GetSplinePointBezierQuad( p1, c2, p3, t ) );
+
+ return 1;
+}
+
+/*
+> point = RL.GetSplinePointBezierCubic( Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t )
+
+Get (evaluate) spline point: Cubic Bezier
+
+- Success return Vector2
+*/
+int lshapesGetSplinePointBezierCubic( lua_State *L ) {
+ Vector2 p1 = uluaGetVector2( L, 1 );
+ Vector2 c2 = uluaGetVector2( L, 2 );
+ Vector2 c3 = uluaGetVector2( L, 3 );
+ Vector2 p4 = uluaGetVector2( L, 4 );
+ float t = luaL_checknumber( L, 5 );
+
+ uluaPushVector2( L, GetSplinePointBezierCubic( p1, c2, c3, p4, t ) );
+
+ return 1;
+}
+
+/*
## Shapes - Basic shapes collision detection functions
*/