diff --git a/src/cells.c b/src/cells.c index 5064601..fdb2196 100644 --- a/src/cells.c +++ b/src/cells.c @@ -47,6 +47,10 @@ void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) break; case STONE: DrawRectangle(CELL_SIZE_PIXELS*j, CELL_SIZE_PIXELS*i, CELL_SIZE_PIXELS, CELL_SIZE_PIXELS, DARKGRAY); + break; + case WATER: + DrawRectangle(CELL_SIZE_PIXELS*j, CELL_SIZE_PIXELS*i, CELL_SIZE_PIXELS, CELL_SIZE_PIXELS, BLUE); + break; default: break; } @@ -59,6 +63,9 @@ void putCell(int grid[CELL_AMOUNT][CELL_AMOUNT], int posX, int posY, CellType br if (grid[posX][posY] == VOID) { grid[posX][posY] = brush; + } else if (brush == VOID) + { + grid[posX][posY] = VOID; } } @@ -83,6 +90,34 @@ void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) else if (i+1 < CELL_AMOUNT && j-1 >= 0 && grid[i+1][j-1] == VOID) { grid[i][j] = VOID; grid[i+1][j-1] = SAND; // falling down-left + } /* Sand falling thru diagonally placed stone: it's not a bug, it's a FEATURE! lol */ + else if (i+1 < CELL_AMOUNT && grid[i+1][j] == WATER) { + grid[i][j] = WATER; + grid[i+1][j] = SAND; + } + break; + case WATER: + if (i+1 < CELL_AMOUNT && grid[i+1][j] == VOID) { + grid[i][j] = VOID; + grid[i+1][j] = WATER; + } else if (i+1 < CELL_AMOUNT && j+1 < CELL_AMOUNT && grid[i+1][j+1] == VOID) { + grid[i][j] = VOID; + grid[i+1][j+1] = WATER; + } else if (i+1 < CELL_AMOUNT && j-1 >= 0 && grid[i+1][j-1] == VOID) { + grid[i][j] = VOID; + grid[i+1][j-1] = WATER; + } else if (j+1 < CELL_AMOUNT && grid[i][j+1] == VOID) { + grid[i][j] = VOID; + grid[i][j+1] = WATER; + } else if (j-1 >= 0 && grid[i][j-1] == VOID) { + grid[i][j] = VOID; + grid[i][j-1] = WATER; + } else if (j+1 < CELL_AMOUNT && grid[i][j+1] == WATER) { + grid[i][j] = WATER; + grid[i][j+1] = WATER; + } else if (j-1 >= 0 && grid[i][j-1] == WATER) { + grid[i][j] = WATER; + grid[i][j-1] = WATER; } break; default: diff --git a/src/main.c b/src/main.c index 2fd5459..262ee3b 100644 --- a/src/main.c +++ b/src/main.c @@ -33,6 +33,7 @@ #include #include #include +#include "utils.h" /* TODO - Changing brush size @@ -48,9 +49,7 @@ int main () GameScreen currentScreen = TITLE; CellType brush = SAND; - SetConfigFlags(FLAG_VSYNC_HINT | FLAG_WINDOW_HIGHDPI); - InitWindow(WINDOW_SIZE_PIXELS, WINDOW_SIZE_PIXELS, "Sandbox"); - SetTargetFPS(TARGET_FPS); + initEnv(); // game loop while (!WindowShouldClose()) @@ -92,14 +91,7 @@ int main () switch (currentScreen) { case TITLE: - int titleWidth = MeasureText("SANDBOX", 40); - DrawRectangle(0, 0, WINDOW_SIZE_PIXELS, WINDOW_SIZE_PIXELS, DARKBLUE); - DrawText("SANDBOX", (WINDOW_SIZE_PIXELS-titleWidth)/2, 20, 40, WHITE); - int controlsWidth = MeasureText("Controls", 30); - DrawText("Controls", (WINDOW_SIZE_PIXELS-controlsWidth)/2, 100, 30, WHITE); - DrawText("Left click to spawn sand", 25, 150, 30, WHITE); - int startGameWidth = MeasureText("Press Space to start!", 30); - DrawText("Press Space to start!", (WINDOW_SIZE_PIXELS-startGameWidth)/2, 400, 30, WHITE); + drawTitleScreen(); break; case GAME: updateGrid(grid); diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..3243ba0 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,50 @@ +/** +* @file src/utils.c +* @brief Miscellaneous utilities for sandbox +* +* @copyright +* Anyone is free to copy, modify, publish, use, compile, sell, or +* distribute this software, either in source code form or as a compiled +* binary, for any purpose, commercial or non-commercial, and by any +* means. +* +* In jurisdictions that recognize copyright laws, the author or authors +* of this software dedicate any and all copyright interest in the +* software to the public domain. We make this dedication for the benefit +* of the public at large and to the detriment of our heirs and +* successors. We intend this dedication to be an overt act of +* relinquishment in perpetuity of all present and future rights to this +* software under copyright law. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +* +* For more information, please refer to +*/ + +#include "raylib.h" +#include "cells.h" + +void initEnv(void) +{ + SetConfigFlags(FLAG_VSYNC_HINT | FLAG_WINDOW_HIGHDPI); + InitWindow(WINDOW_SIZE_PIXELS, WINDOW_SIZE_PIXELS, "Sandbox"); + SetTargetFPS(TARGET_FPS); +} + +void drawTitleScreen(void) +{ + int titleWidth = MeasureText("SANDBOX", 40); + DrawRectangle(0, 0, WINDOW_SIZE_PIXELS, WINDOW_SIZE_PIXELS, DARKBLUE); + DrawText("SANDBOX", (WINDOW_SIZE_PIXELS-titleWidth)/2, 20, 40, WHITE); + int controlsWidth = MeasureText("Controls", 30); + DrawText("Controls", (WINDOW_SIZE_PIXELS-controlsWidth)/2, 100, 30, WHITE); + DrawText("Left click to spawn sand", 25, 150, 30, WHITE); + int startGameWidth = MeasureText("Press Space to start!", 30); + DrawText("Press Space to start!", (WINDOW_SIZE_PIXELS-startGameWidth)/2, 400, 30, WHITE); +} \ No newline at end of file diff --git a/src/utils.h b/src/utils.h new file mode 100644 index 0000000..0d99f5f --- /dev/null +++ b/src/utils.h @@ -0,0 +1,36 @@ +/** +* @file src/utils.h +* @brief Miscellaneous utilities for sandbox +* +* @copyright +* Anyone is free to copy, modify, publish, use, compile, sell, or +* distribute this software, either in source code form or as a compiled +* binary, for any purpose, commercial or non-commercial, and by any +* means. +* +* In jurisdictions that recognize copyright laws, the author or authors +* of this software dedicate any and all copyright interest in the +* software to the public domain. We make this dedication for the benefit +* of the public at large and to the detriment of our heirs and +* successors. We intend this dedication to be an overt act of +* relinquishment in perpetuity of all present and future rights to this +* software under copyright law. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +* +* For more information, please refer to +*/ + +#ifndef UTILS_H +#define UTILS_H + +void initEnv(void); +void drawTitleScreen(void); + +#endif // UTILS_H \ No newline at end of file