From 294533ccda115b5e638ab1f9219f86d73c9c4550 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Sat, 30 Nov 2013 18:12:40 +0100 Subject: [PATCH] Updated to version 1.0.2 Some functions added (collision detection) Check CHANGELOG for details --- README.md | 2 +- release/win32-mingw/include/raylib.h | 9 ++- release/win32-mingw/lib/libraylib.a | Bin 133040 -> 135180 bytes src/models.c | 40 +++++++++-- src/raylib.h | 8 ++- src/shapes.c | 99 ++++++++++++++++++++++++++- src/textures.c | 30 ++++++++ 7 files changed, 179 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index dbcd7a856..ebb528ebf 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ raylib has been developed using exclusively two tools: * Notepad++ (text editor) - [http://notepad-plus-plus.org/](http://notepad-plus-plus.org/) * MinGW (GCC compiler) - [http://www.mingw.org/](http://www.mingw.org/) -Those are the tools I recommended to develop with raylib, actually, my students develop using this tools. +Those are the tools I recommend to develop with raylib, in fact, those are the tools my students use. I believe those are the best tools to train spartan-programmers. Someone could argue about debugging. raylib is a library intended for learning and I think C it's a clear enough language diff --git a/release/win32-mingw/include/raylib.h b/release/win32-mingw/include/raylib.h index 14a3300ee..7f14113f7 100644 --- a/release/win32-mingw/include/raylib.h +++ b/release/win32-mingw/include/raylib.h @@ -1,6 +1,6 @@ /********************************************************************************************* * -* raylib 1.0.1 (www.raylib.com) +* raylib 1.0.2 (www.raylib.com) * * A simple and easy-to-use library to learn C videogames programming * @@ -301,6 +301,11 @@ void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); void DrawPoly(Vector2 *points, int numPoints, Color color); // Draw a closed polygon defined by points void DrawPolyLine(Vector2 *points, int numPoints, Color color); // Draw polygon lines +bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles +bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); // Check collision between two circles +bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); // Check collision between circle and rectangle +Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); // Get collision rectangle for two rectangles collision + //------------------------------------------------------------------------------------ // Texture Loading and Drawing Functions (Module: textures) //------------------------------------------------------------------------------------ @@ -313,10 +318,12 @@ void DrawTexture(Texture2D texture, int posX, int posY, Color tint); void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); // Draw a Texture2D with extended parameters void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Color tint); // Draw a part of a texture defined by a rectangle void DrawTexturePro(Texture2D texture, Rectangle sourceRec, Rectangle destRec, Vector2 origin, float rotation, Color tint); // Draw a part of a texture defined by a rectangle with 'pro' parameters +Texture2D CreateTexture2D(Image image); // Create a Texture2D from Image data //------------------------------------------------------------------------------------ // Font Loading and Text Drawing Functions (Module: text) //------------------------------------------------------------------------------------ +SpriteFont GetDefaultFont(); // Get the default SpriteFont SpriteFont LoadSpriteFont(const char *fileName); // Load a SpriteFont image into GPU memory void UnloadSpriteFont(SpriteFont spriteFont); // Unload SpriteFont from GPU memory void DrawText(const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) diff --git a/release/win32-mingw/lib/libraylib.a b/release/win32-mingw/lib/libraylib.a index 028e78705343d0b8fd71bd65ee29e6104d3f42d9..f07e2f65184a1a923aa5902edbf6af6886dbee9d 100644 GIT binary patch delta 15960 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 H#sX0Q<_(ht delta 13979 zcmeBKz_Fp9V}eY*nVE@+v6+H`fdU91lL`t(X68m9Q3ZtrE(QjMCI$wsEmX$!Bp7I` z!oWZ&4x7fnfQ;*rImqln7X}6zVa9}Q3@}^|W8kFQiWnHFjbD6YV1!@`7z303q{hIA z8&4Lrn6imEm}&CeGLy+l<>8xM*y5QsZ{|>9-28;IfKiGeIlm}XFJB*$eiRfG42>;J z!HI41{tEHUE!+?Em@Eu8r&$#-v%-WWBuq?AAQ}?5d>C07K;WAQ1B1r�*App&T9t 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 framerate drops 80%! CRAZY! Vector3 *terrainVertex = (Vector3 *)malloc(heightmap.width * heightmap.height * sizeof(Vector3)); diff --git a/src/raylib.h b/src/raylib.h index 54065dd0a..7f14113f7 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -1,6 +1,6 @@ /********************************************************************************************* * -* raylib 1.0.1 (www.raylib.com) +* raylib 1.0.2 (www.raylib.com) * * A simple and easy-to-use library to learn C videogames programming * @@ -301,6 +301,11 @@ void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); void DrawPoly(Vector2 *points, int numPoints, Color color); // Draw a closed polygon defined by points void DrawPolyLine(Vector2 *points, int numPoints, Color color); // Draw polygon lines +bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles +bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); // Check collision between two circles +bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); // Check collision between circle and rectangle +Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); // Get collision rectangle for two rectangles collision + //------------------------------------------------------------------------------------ // Texture Loading and Drawing Functions (Module: textures) //------------------------------------------------------------------------------------ @@ -313,6 +318,7 @@ void DrawTexture(Texture2D texture, int posX, int posY, Color tint); void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); // Draw a Texture2D with extended parameters void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Color tint); // Draw a part of a texture defined by a rectangle void DrawTexturePro(Texture2D texture, Rectangle sourceRec, Rectangle destRec, Vector2 origin, float rotation, Color tint); // Draw a part of a texture defined by a rectangle with 'pro' parameters +Texture2D CreateTexture2D(Image image); // Create a Texture2D from Image data //------------------------------------------------------------------------------------ // Font Loading and Text Drawing Functions (Module: text) diff --git a/src/shapes.c b/src/shapes.c index ea55f1985..564676654 100644 --- a/src/shapes.c +++ b/src/shapes.c @@ -2,7 +2,7 @@ * * raylib.shapes * -* Basic functions to draw 2d Shapes +* Basic functions to draw 2d Shapes and check collisions * * Copyright (c) 2013 Ramon Santamaria (Ray San - raysan@raysanweb.com) * @@ -26,7 +26,9 @@ #include "raylib.h" #include // OpenGL functions +#include // Required for abs() function #include // Math related functions, sin() and cos() used on DrawCircle* + // sqrt() and pow() and abs() used on CheckCollision* //---------------------------------------------------------------------------------- // Defines and Macros @@ -323,4 +325,97 @@ void DrawPolyLine(Vector2 *points, int numPoints, Color color) //glDisable(GL_LINE_SMOOTH); } -} +} + +// Check collision between two rectangles +bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2) +{ + bool collision = false; + + int dx = abs((rec1.x + rec1.width / 2) - (rec2.x + rec2.width / 2)); + int dy = abs((rec1.y + rec1.height / 2) - (rec2.y + rec2.height / 2)); + + if ((dx <= (rec1.width / 2 + rec2.width / 2)) && ((dy <= (rec1.height / 2 + rec2.height / 2)))) collision = true; + + return collision; +} + +// Check collision between two circles +bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2) +{ + bool collision = false; + + float dx = center2.x - center1.x; // X distance between centers + float dy = center2.y - center1.y; // Y distance between centers + + float distance = sqrt(dx*dx + dy*dy); // Distance between centers + + if (distance <= (radius1 + radius2)) collision = true; + + return collision; +} + +// Check collision between circle and rectangle +bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec) +{ + bool collision = false; + + float dx = abs((rec.x + rec.width / 2) - center.x); + float dy = abs((rec.y + rec.height / 2) - center.y); + + if ((dx <= (rec.width / 2 + radius)) && (dy <= (rec.height / 2 + radius))) collision = true; + + return collision; +} + +// Get collision rectangle for two rectangles collision +Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2) +{ + Rectangle retRec = { 0, 0, 0, 0 }; + + if (CheckCollisionRecs(rec1, rec2)) + { + int dxx = abs(rec1.x - rec2.x); + int dyy = abs(rec1.y - rec2.y); + + if (rec1.x <= rec2.x) + { + if (rec1.y <= rec2.y) + { + retRec.x = rec2.x; + retRec.y = rec2.y; + retRec.width = rec1.width - dxx; + retRec.height = rec1.height - dyy; + } + else + { + retRec.x = rec2.x; + retRec.y = rec1.y; + retRec.width = rec1.width - dxx; + retRec.height = rec2.height - dyy; + } + } + else + { + if (rec1.y <= rec2.y) + { + retRec.x = rec1.x; + retRec.y = rec2.y; + retRec.width = rec2.width - dxx; + retRec.height = rec1.height - dyy; + } + else + { + retRec.x = rec1.x; + retRec.y = rec1.y; + retRec.width = rec2.width - dxx; + retRec.height = rec2.height - dyy; + } + } + + if (retRec.width >= rec2.width) retRec.width = rec2.width; + if (retRec.height >= rec2.height) retRec.height = rec2.height; + } + + return retRec; +} diff --git a/src/textures.c b/src/textures.c index 3ccb5358a..19eb09b42 100644 --- a/src/textures.c +++ b/src/textures.c @@ -157,6 +157,36 @@ Texture2D LoadTextureEx(const char *fileName, bool createPOT, bool mipmaps) return texture; } +// Create a Texture2D from Image data +// NOTE: Image is not unloaded, it should be done manually... +Texture2D CreateTexture2D(Image image) +{ + Texture2D texture; + + // Convert image data to OpenGL texture + //---------------------------------------- + GLuint id; + glGenTextures(1, &id); // Generate Pointer to the Texture + + glBindTexture(GL_TEXTURE_2D, id); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // Set texture to repead on x-axis + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // Set texture to repead on y-axis + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // Filter for pixel-perfect drawing, alternative: GL_LINEAR + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // Filter for pixel-perfect drawing, alternative: GL_LINEAR + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, image.width, image.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image.pixels); + + // NOTE: Not using mipmappings (texture for 2D drawing) + // At this point we have the image converted to texture and uploaded to GPU + + texture.glId = id; + texture.width = image.width; + texture.height = image.height; + + return texture; +} + // Unload texture from GPU memory void UnloadTexture(Texture2D texture) {