diff options
Diffstat (limited to 'src/world.c')
-rw-r--r-- | src/world.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/world.c b/src/world.c new file mode 100644 index 0000000..17e35b9 --- /dev/null +++ b/src/world.c @@ -0,0 +1,101 @@ +#include <raylib.h> +#include <stdio.h> +#include <math.h> + +#include "world.h" +#include "globals.h" +#include "player.h" + +Color colors[7] = { + GREEN, + BLUE, + RED, + YELLOW, + ORANGE, + PURPLE, + WHITE +}; + +void drawWorld(World *world) +{ + int cubeMaterial; + Color cubeColor; + for (int x=0;x<WORLD_WIDTH; x++) + for (int y=0;y<WORLD_HEIGHT; y++) + for (int z=0;z<WORLD_WIDTH; z++) { + cubeMaterial = world->map[y][x][z]; + switch (cubeMaterial) { + case 1 ... 7: + cubeColor=colors[cubeMaterial-1]; + draw: + DrawCube( + (Vector3){ + (float)x, + (float)y, + (float)z + }, + 1.0f, 1.0f, 1.0f, + cubeColor + ); + DrawCubeWires( + (Vector3){ + (float)x, + (float)y, + (float)z + }, + 1.0f, 1.0f, 1.0f, + BLACK + ); + break; + } + } +} + +void handleCollision(World *world, Player *player) +{ + int posX, posY, posZ; + posX = (int)player->pos.x; + posY = (int)player->pos.y; + posZ = (int)player->pos.z; + //Floor check: + if (world->map[posY][posX][posZ]!=0) { + player->is_on_floor=1; + if (player->velocity.y < 0.0f) { + player->velocity.y = 0.0f; + } + } else { + player->is_on_floor=0; + } + if (world->map[posY][posX][posZ]!=0 + && (float)posY!=player->pos.y) { + player->camera.position.y=(float)posY+2; + //player->velocity.y = 0.0f; + } +} + +void handleGravity(World *world, Player *player) +{ + if (player->velocity.y > 0.0f) { + player->velocity.y *= 0.9f; + } + if (player->velocity.y <= 0.1f && player->velocity.y > 0.0f) { + player->velocity.y = 0.0f; + } + int posX, posY, posZ; + posX = (int)player->pos.x; + posY = (int)player->pos.y; + posZ = (int)player->pos.z; + printf( + "Player.pos.y:\t%d\n" + "Player.pos.x:\t%d\n" + "Player.pos.z:\t%d\n", + posY, + posX, + posZ + ); + printf("%d\n", (int)world->map[posY][posX][posZ]); + if (player->velocity.y <= 0.0f + && world->map[posY][posX][posZ]==0) { + player->velocity.y -= 0.1f; + } +} |