2
0
Эх сурвалжийг харах

Removed function: ResolveCollisionCubicmap()

Function was inefficient and should be rewritten from scratch, it
probably neither belongs to this module but an example...
raysan5 9 жил өмнө
parent
commit
b082807b0b
2 өөрчлөгдсөн 2 нэмэгдсэн , 255 устгасан
  1. 0 250
      src/models.c
  2. 2 5
      src/raylib.h

+ 0 - 250
src/models.c

@@ -1548,256 +1548,6 @@ BoundingBox CalculateBoundingBox(Mesh mesh)
     return box;
 }
 
-// Detect and resolve cubicmap collisions
-// NOTE: player position (or camera) is modified inside this function
-// TODO: This functions needs to be completely reviewed!
-Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *playerPosition, float radius)
-{
-    #define CUBIC_MAP_HALF_BLOCK_SIZE   0.5
-
-    Color *cubicmapPixels = GetImageData(cubicmap);
-
-    // Detect the cell where the player is located
-    Vector3 impactDirection = { 0.0f, 0.0f, 0.0f };
-
-    int locationCellX = 0;
-    int locationCellY = 0;
-
-    locationCellX = floor(playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE);
-    locationCellY = floor(playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE);
-
-    if ((locationCellX >= 0) && (locationCellY >= 0) && (locationCellX < cubicmap.width) && (locationCellY < cubicmap.height))
-    {
-        // Multiple Axis --------------------------------------------------------------------------------------------
-
-        // Axis x-, y-
-        if ((locationCellX > 0) && (locationCellY > 0))
-        {
-            if ((cubicmapPixels[locationCellY*cubicmap.width + (locationCellX - 1)].r != 0) &&
-                (cubicmapPixels[(locationCellY - 1)*cubicmap.width + (locationCellX)].r != 0))
-            {
-                if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX < radius) &&
-                    ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY < radius))
-                {
-                    playerPosition->x = locationCellX + mapPosition.x - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    playerPosition->z = locationCellY + mapPosition.z - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f };
-                }
-            }
-        }
-
-        // Axis x-, y+
-        if ((locationCellX > 0) && (locationCellY < cubicmap.height - 1))
-        {
-            if ((cubicmapPixels[locationCellY*cubicmap.width + (locationCellX - 1)].r != 0) &&
-                (cubicmapPixels[(locationCellY + 1)*cubicmap.width + (locationCellX)].r != 0))
-            {
-                if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX < radius) &&
-                    ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY > 1 - radius))
-                {
-                    playerPosition->x = locationCellX + mapPosition.x - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    playerPosition->z = locationCellY + mapPosition.z + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f };
-                }
-            }
-        }
-
-        // Axis x+, y-
-        if ((locationCellX < cubicmap.width - 1) && (locationCellY > 0))
-        {
-            if ((cubicmapPixels[locationCellY*cubicmap.width + (locationCellX + 1)].r != 0) &&
-                (cubicmapPixels[(locationCellY - 1)*cubicmap.width + (locationCellX)].r != 0))
-            {
-                if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX > 1 - radius) &&
-                    ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY < radius))
-                {
-                    playerPosition->x = locationCellX + mapPosition.x + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    playerPosition->z = locationCellY + mapPosition.z - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f };
-                }
-            }
-        }
-
-        // Axis x+, y+
-        if ((locationCellX < cubicmap.width - 1) && (locationCellY < cubicmap.height - 1))
-        {
-            if ((cubicmapPixels[locationCellY*cubicmap.width + (locationCellX + 1)].r != 0) &&
-                (cubicmapPixels[(locationCellY + 1)*cubicmap.width + (locationCellX)].r != 0))
-            {
-                if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX > 1 - radius) &&
-                    ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY > 1 - radius))
-                {
-                    playerPosition->x = locationCellX + mapPosition.x + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    playerPosition->z = locationCellY + mapPosition.z + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f };
-                }
-            }
-        }
-
-        // Single Axis ---------------------------------------------------------------------------------------------------
-
-        // Axis x-
-        if (locationCellX > 0)
-        {
-            if (cubicmapPixels[locationCellY*cubicmap.width + (locationCellX - 1)].r != 0)
-            {
-                if ((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX < radius)
-                {
-                    playerPosition->x = locationCellX + mapPosition.x - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    impactDirection = (Vector3){ 1.0f, 0.0f, 0.0f };
-                }
-            }
-        }
-        // Axis x+
-        if (locationCellX < cubicmap.width - 1)
-        {
-            if (cubicmapPixels[locationCellY*cubicmap.width + (locationCellX + 1)].r != 0)
-            {
-                if ((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX > 1 - radius)
-                {
-                    playerPosition->x = locationCellX + mapPosition.x + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    impactDirection = (Vector3){ 1.0f, 0.0f, 0.0f };
-                }
-            }
-        }
-        // Axis y-
-        if (locationCellY > 0)
-        {
-            if (cubicmapPixels[(locationCellY - 1)*cubicmap.width + (locationCellX)].r != 0)
-            {
-                if ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY < radius)
-                {
-                    playerPosition->z = locationCellY + mapPosition.z - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    impactDirection = (Vector3){ 0.0f, 0.0f, 1.0f };
-                }
-            }
-        }
-        // Axis y+
-        if (locationCellY < cubicmap.height - 1)
-        {
-            if (cubicmapPixels[(locationCellY + 1)*cubicmap.width + (locationCellX)].r != 0)
-            {
-                if ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY > 1 - radius)
-                {
-                    playerPosition->z = locationCellY + mapPosition.z + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    impactDirection = (Vector3){ 0.0f, 0.0f, 1.0f };
-                }
-            }
-        }
-
-        // Diagonals -------------------------------------------------------------------------------------------------------
-
-        // Axis x-, y-
-        if ((locationCellX > 0) && (locationCellY > 0))
-        {
-            if ((cubicmapPixels[locationCellY*cubicmap.width + (locationCellX - 1)].r == 0) &&
-                (cubicmapPixels[(locationCellY - 1)*cubicmap.width + (locationCellX)].r == 0) &&
-                (cubicmapPixels[(locationCellY - 1)*cubicmap.width + (locationCellX - 1)].r != 0))
-            {
-                if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX < radius) &&
-                    ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY < radius))
-                {
-                    if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX) > ((playerPosition->z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY)) playerPosition->x = locationCellX + mapPosition.x - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    else playerPosition->z = locationCellY + mapPosition.z - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-
-                    // Return ricochet
-                    if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX < radius/3) &&
-                        ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY < radius/3))
-                    {
-                        impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f };
-                    }
-                }
-            }
-        }
-
-        // Axis x-, y+
-        if ((locationCellX > 0) && (locationCellY < cubicmap.height - 1))
-        {
-            if ((cubicmapPixels[locationCellY*cubicmap.width + (locationCellX - 1)].r == 0) &&
-                (cubicmapPixels[(locationCellY + 1)*cubicmap.width + (locationCellX)].r == 0) &&
-                (cubicmapPixels[(locationCellY + 1)*cubicmap.width + (locationCellX - 1)].r != 0))
-            {
-                if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX < radius) &&
-                    ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY > 1 - radius))
-                {
-                    if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX) > (1 - ((playerPosition->z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY))) playerPosition->x = locationCellX + mapPosition.x - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    else playerPosition->z = locationCellY + mapPosition.z + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-
-                    // Return ricochet
-                    if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX < radius/3) &&
-                        ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY > 1 - radius/3))
-                    {
-                        impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f };
-                    }
-                }
-            }
-        }
-
-        // Axis x+, y-
-        if ((locationCellX < cubicmap.width - 1) && (locationCellY > 0))
-        {
-            if ((cubicmapPixels[locationCellY*cubicmap.width + (locationCellX + 1)].r == 0) &&
-                (cubicmapPixels[(locationCellY - 1)*cubicmap.width + (locationCellX)].r == 0) &&
-                (cubicmapPixels[(locationCellY - 1)*cubicmap.width + (locationCellX + 1)].r != 0))
-            {
-                if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX > 1 - radius) &&
-                    ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY < radius))
-                {
-                    if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX) < (1 - ((playerPosition->z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY))) playerPosition->x = locationCellX + mapPosition.x + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    else playerPosition->z = locationCellY + mapPosition.z - (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-
-                    // Return ricochet
-                    if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX > 1 - radius/3) &&
-                        ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY < radius/3))
-                    {
-                        impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f };
-                    }
-                }
-            }
-        }
-
-        // Axis x+, y+
-        if ((locationCellX < cubicmap.width - 1) && (locationCellY < cubicmap.height - 1))
-        {
-            if ((cubicmapPixels[locationCellY*cubicmap.width + (locationCellX + 1)].r == 0) &&
-                (cubicmapPixels[(locationCellY + 1)*cubicmap.width + (locationCellX)].r == 0) &&
-                (cubicmapPixels[(locationCellY + 1)*cubicmap.width + (locationCellX + 1)].r != 0))
-            {
-                if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX > 1 - radius) &&
-                    ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY > 1 - radius))
-                {
-                    if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX) < ((playerPosition->z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY)) playerPosition->x = locationCellX + mapPosition.x + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-                    else playerPosition->z = locationCellY + mapPosition.z + (CUBIC_MAP_HALF_BLOCK_SIZE - radius);
-
-                    // Return ricochet
-                    if (((playerPosition->x - mapPosition.x + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellX > 1 - radius/3) &&
-                        ((playerPosition->z - mapPosition.z + CUBIC_MAP_HALF_BLOCK_SIZE) - locationCellY > 1 - radius/3))
-                    {
-                        impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f };
-                    }
-                }
-            }
-        }
-    }
-
-    // Floor collision
-    if (playerPosition->y <= radius)
-    {
-        playerPosition->y = radius + 0.01f;
-        impactDirection = (Vector3) { impactDirection.x, 1, impactDirection.z};
-    }
-    // Roof collision
-    else if (playerPosition->y >= (1.5f - radius))
-    {
-        playerPosition->y = (1.5f - radius) - 0.01f;
-        impactDirection = (Vector3) { impactDirection.x, 1, impactDirection.z};
-    }
-
-    free(cubicmapPixels);
-
-    return impactDirection;
-}
-
 //----------------------------------------------------------------------------------
 // Module specific Functions Definition
 //----------------------------------------------------------------------------------

+ 2 - 5
src/raylib.h

@@ -839,9 +839,7 @@ RLAPI Model LoadHeightmap(Image heightmap, Vector3 size);             // Load a
 RLAPI Model LoadCubicmap(Image cubicmap);                             // Load a map image as a 3d model (cubes based)
 RLAPI void UnloadModel(Model model);                                  // Unload 3d model from memory
 
-RLAPI Mesh GenMeshCube(float width, float height, float depth);       // Generate mesh: cube
-
-RLAPI Material LoadMaterial(const char *fileName);                    // Load material data (from file)
+RLAPI Material LoadMaterial(const char *fileName);                    // Load material data (.MTL)
 RLAPI Material LoadDefaultMaterial(void);                             // Load default material (uses default models shader)
 RLAPI Material LoadStandardMaterial(void);                            // Load standard material (uses material attributes and lighting shader)
 RLAPI void UnloadMaterial(Material material);                         // Unload material textures from VRAM
@@ -862,8 +860,7 @@ RLAPI bool CheckCollisionBoxSphere(BoundingBox box, Vector3 centerSphere, float
 RLAPI bool CheckCollisionRaySphere(Ray ray, Vector3 spherePosition, float sphereRadius);                              // Detect collision between ray and sphere
 RLAPI bool CheckCollisionRaySphereEx(Ray ray, Vector3 spherePosition, float sphereRadius, Vector3 *collisionPoint);   // Detect collision between ray and sphere with extended parameters and collision point detection
 RLAPI bool CheckCollisionRayBox(Ray ray, BoundingBox box);                                                            // Detect collision between ray and box
-RLAPI Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *playerPosition, float radius);   // Detect collision of player radius with cubicmap
-                                                                                                                // NOTE: Return the normal vector of the impacted surface
+
 //------------------------------------------------------------------------------------
 // Shaders System Functions (Module: rlgl)
 // NOTE: This functions are useless when using OpenGL 1.1