|
|
@ -741,8 +741,8 @@ Model LoadCubicmap(Image cubicmap) |
|
|
|
|
|
|
|
// Map cube size will be 1.0 |
|
|
|
float mapCubeSide = 1.0f; |
|
|
|
int mapWidth = cubicmap.width * (int)mapCubeSide; |
|
|
|
int mapHeight = cubicmap.height * (int)mapCubeSide; |
|
|
|
int mapWidth = cubicmap.width*(int)mapCubeSide; |
|
|
|
int mapHeight = cubicmap.height*(int)mapCubeSide; |
|
|
|
|
|
|
|
// NOTE: Max possible number of triangles numCubes * (12 triangles by cube) |
|
|
|
int maxTriangles = cubicmap.width*cubicmap.height*12; |
|
|
@ -753,11 +753,11 @@ Model LoadCubicmap(Image cubicmap) |
|
|
|
|
|
|
|
float w = mapCubeSide; |
|
|
|
float h = mapCubeSide; |
|
|
|
float h2 = mapCubeSide * 1.5; // TODO: Review walls height... |
|
|
|
float h2 = mapCubeSide*1.5f; // TODO: Review walls height... |
|
|
|
|
|
|
|
Vector3 *mapVertices = (Vector3 *)malloc(maxTriangles * 3 * sizeof(Vector3)); |
|
|
|
Vector2 *mapTexcoords = (Vector2 *)malloc(maxTriangles * 3 * sizeof(Vector2)); |
|
|
|
Vector3 *mapNormals = (Vector3 *)malloc(maxTriangles * 3 * sizeof(Vector3)); |
|
|
|
Vector3 *mapVertices = (Vector3 *)malloc(maxTriangles*3*sizeof(Vector3)); |
|
|
|
Vector2 *mapTexcoords = (Vector2 *)malloc(maxTriangles*3*sizeof(Vector2)); |
|
|
|
Vector3 *mapNormals = (Vector3 *)malloc(maxTriangles*3*sizeof(Vector3)); |
|
|
|
|
|
|
|
// Define the 6 normals of the cube, we will combine them accordingly later... |
|
|
|
Vector3 n1 = { 1.0f, 0.0f, 0.0f }; |
|
|
@ -775,12 +775,12 @@ Model LoadCubicmap(Image cubicmap) |
|
|
|
float height; |
|
|
|
} RectangleF; |
|
|
|
|
|
|
|
RectangleF rightTexUV = { i">0, 0, 0.5, 0.5 }; |
|
|
|
RectangleF leftTexUV = { 0.5, 0, 0.5, 0.5 }; |
|
|
|
RectangleF frontTexUV = { i">0, 0, 0.5, 0.5 }; |
|
|
|
RectangleF backTexUV = { 0.5, 0, 0.5, 0.5 }; |
|
|
|
RectangleF topTexUV = { i">0, 0.5, 0.5, 0.5 }; |
|
|
|
RectangleF bottomTexUV = { 0.5, 0.5, 0.5, 0.5 }; |
|
|
|
RectangleF rightTexUV = { f">0.0f, 0.0f, 0.5f, 0.5f }; |
|
|
|
RectangleF leftTexUV = { 0.5f, 0.0f, 0.5f, 0.5f }; |
|
|
|
RectangleF frontTexUV = { f">0.0f, 0.0f, 0.5f, 0.5f }; |
|
|
|
RectangleF backTexUV = { 0.5f, 0.0f, 0.5f, 0.5f }; |
|
|
|
RectangleF topTexUV = { f">0.0f, 0.5f, 0.5f, 0.5f }; |
|
|
|
RectangleF bottomTexUV = { 0.5f, 0.5f, 0.5f, 0.5f }; |
|
|
|
|
|
|
|
for (int z = 0; z < mapHeight; z += mapCubeSide) |
|
|
|
{ |
|
|
@ -1147,7 +1147,7 @@ void SetModelTexture(Model *model, Texture2D texture) |
|
|
|
void DrawModel(Model model, Vector3 position, float scale, Color tint) |
|
|
|
{ |
|
|
|
Vector3 vScale = { scale, scale, scale }; |
|
|
|
Vector3 rotationAxis = { i">0, 0, 0 }; |
|
|
|
Vector3 rotationAxis = { f">0.0f, 0.0f, 0.0f }; |
|
|
|
|
|
|
|
DrawModelEx(model, position, 0.0f, rotationAxis, vScale, tint); |
|
|
|
} |
|
|
@ -1163,7 +1163,7 @@ void DrawModelEx(Model model, Vector3 position, float rotationAngle, Vector3 rot |
|
|
|
void DrawModelWires(Model model, Vector3 position, float scale, Color color) |
|
|
|
{ |
|
|
|
Vector3 vScale = { scale, scale, scale }; |
|
|
|
Vector3 rotationAxis = { i">0, 0, 0 }; |
|
|
|
Vector3 rotationAxis = { f">0.0f, 0.0f, 0.0f }; |
|
|
|
|
|
|
|
rlglDrawModel(model, position, 0.0f, rotationAxis, vScale, color, true); |
|
|
|
} |
|
|
@ -1188,7 +1188,7 @@ void DrawBillboard(Camera camera, Texture2D texture, Vector3 center, float size, |
|
|
|
//Vector3 up = { viewMatrix.m1, viewMatrix.m5, viewMatrix.m9 }; |
|
|
|
|
|
|
|
// NOTE: Billboard locked to axis-Y |
|
|
|
Vector3 up = { i">0, 1, 0 }; |
|
|
|
Vector3 up = { f">0.0f, 1.0f, 0.0f }; |
|
|
|
/* |
|
|
|
a-------b |
|
|
|
| | |
|
|
@ -1366,7 +1366,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
Color *cubicmapPixels = GetImageData(cubicmap); |
|
|
|
|
|
|
|
// Detect the cell where the player is located |
|
|
|
Vector3 impactDirection = { i">0, 0, 0 }; |
|
|
|
Vector3 impactDirection = { f">0.0f, 0.0f, 0.0f }; |
|
|
|
|
|
|
|
int locationCellX = 0; |
|
|
|
int locationCellY = 0; |
|
|
@ -1389,7 +1389,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
{ |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1405,7 +1405,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
{ |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1421,7 +1421,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
{ |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1437,7 +1437,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
{ |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1452,7 +1452,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
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, 0, 0}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 0.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1464,7 +1464,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
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, 0, 0}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 0.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1476,7 +1476,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 0.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1488,7 +1488,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 0.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1512,7 +1512,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1535,7 +1535,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1558,7 +1558,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1581,7 +1581,7 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
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, 0, 1}; |
|
|
|
impactDirection = (Vector3){ 1.0f, 0.0f, 1.0f }; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1591,13 +1591,13 @@ Vector3 ResolveCollisionCubicmap(Image cubicmap, Vector3 mapPosition, Vector3 *p |
|
|
|
// Floor collision |
|
|
|
if (playerPosition->y <= radius) |
|
|
|
{ |
|
|
|
playerPosition->y = radius + 0.01; |
|
|
|
playerPosition->y = radius + 0.01f; |
|
|
|
impactDirection = (Vector3) { impactDirection.x, 1, impactDirection.z}; |
|
|
|
} |
|
|
|
// Roof collision |
|
|
|
else if (playerPosition->y >= 1.5 - radius) |
|
|
|
else if (playerPosition->y >= p">(1.5f - radius)) |
|
|
|
{ |
|
|
|
playerPosition->y = (1.5 - radius) - 0.01; |
|
|
|
playerPosition->y = (1.5f - radius) - 0.01f; |
|
|
|
impactDirection = (Vector3) { impactDirection.x, 1, impactDirection.z}; |
|
|
|
} |
|
|
|
|
|
|
|