more mediocre water?
This commit is contained in:
82
src/cells.c
82
src/cells.c
@@ -30,6 +30,7 @@
|
||||
#include <stdio.h>
|
||||
#include "cells.h"
|
||||
#include "raylib.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT])
|
||||
{
|
||||
@@ -58,66 +59,62 @@ void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT])
|
||||
}
|
||||
}
|
||||
|
||||
void putCell(int grid[CELL_AMOUNT][CELL_AMOUNT], int posX, int posY, CellType brush)
|
||||
void putCell(int grid[CELL_AMOUNT][CELL_AMOUNT], int posX, int posY, CellType brush, int brushSize)
|
||||
{
|
||||
if (grid[posX][posY] == VOID)
|
||||
{
|
||||
grid[posX][posY] = brush;
|
||||
for (int i=0; i<brushSize; i++)
|
||||
{
|
||||
for (int j=0; j<brushSize; j++)
|
||||
{
|
||||
if (posX+i < CELL_AMOUNT && posY+j < CELL_AMOUNT) {
|
||||
grid[posX+i][posY+j] = brush;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (brush == VOID)
|
||||
{
|
||||
grid[posX][posY] = VOID;
|
||||
}
|
||||
}
|
||||
|
||||
void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT])
|
||||
{
|
||||
for (int i=CELL_AMOUNT-1; i>=0; i--)
|
||||
{
|
||||
for (int j=0; j<CELL_AMOUNT; j++)
|
||||
{
|
||||
switch (grid[i][j])
|
||||
{
|
||||
void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]) {
|
||||
for (int i = CELL_AMOUNT - 1; i >= 0; i--) {
|
||||
for (int j = 0; j < CELL_AMOUNT; j++) {
|
||||
switch (grid[i][j]) {
|
||||
case VOID:
|
||||
break;
|
||||
case SAND:
|
||||
if (i+1 < CELL_AMOUNT && grid[i+1][j] == VOID) {
|
||||
if (i + 1 < CELL_AMOUNT && grid[i + 1][j] == VOID) {
|
||||
grid[i][j] = VOID;
|
||||
grid[i+1][j] = SAND; // falling downwards
|
||||
} else if (i+1 < CELL_AMOUNT && j+1 < CELL_AMOUNT && grid[i+1][j+1] == VOID) {
|
||||
grid[i + 1][j] = SAND;
|
||||
} 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] = SAND; // falling down-right
|
||||
}
|
||||
else if (i+1 < CELL_AMOUNT && j-1 >= 0 && grid[i+1][j-1] == VOID) {
|
||||
grid[i + 1][j + 1] = SAND;
|
||||
} 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 + 1][j - 1] = SAND;
|
||||
} else if (i + 1 < CELL_AMOUNT && grid[i + 1][j] == WATER) {
|
||||
grid[i][j] = WATER;
|
||||
grid[i+1][j] = SAND;
|
||||
grid[i + 1][j] = SAND;
|
||||
}
|
||||
break;
|
||||
case WATER:
|
||||
if (i+1 < CELL_AMOUNT && grid[i+1][j] == VOID) {
|
||||
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 + 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 + 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 + 1][j - 1] = WATER;
|
||||
} else {
|
||||
int direction = rand() % 2 == 0 ? -1 : 1;
|
||||
if (j + direction >= 0 && j + direction < CELL_AMOUNT && grid[i][j + direction] == 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;
|
||||
grid[i][j + direction] = WATER;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -126,3 +123,14 @@ void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void clearGrid(int grid[CELL_AMOUNT][CELL_AMOUNT])
|
||||
{
|
||||
for (size_t i=0; i<CELL_AMOUNT; i++)
|
||||
{
|
||||
for (size_t j=0; j<CELL_AMOUNT; j++)
|
||||
{
|
||||
grid[i][j] = VOID;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -55,7 +55,8 @@ typedef enum CellType
|
||||
} CellType;
|
||||
|
||||
void drawGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]);
|
||||
void putCell(int grid[CELL_AMOUNT][CELL_AMOUNT], int posX, int posY, CellType brush);
|
||||
void putCell(int grid[CELL_AMOUNT][CELL_AMOUNT], int posX, int posY, CellType brush, int brushSize);
|
||||
void updateGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]);
|
||||
void clearGrid(int grid[CELL_AMOUNT][CELL_AMOUNT]);
|
||||
|
||||
#endif // CELLS_H
|
||||
12
src/main.c
12
src/main.c
@@ -48,6 +48,7 @@ int main ()
|
||||
int grid[CELL_AMOUNT][CELL_AMOUNT] = {0};
|
||||
GameScreen currentScreen = TITLE;
|
||||
CellType brush = SAND;
|
||||
int brushSize = 1;
|
||||
|
||||
initEnv();
|
||||
|
||||
@@ -68,7 +69,7 @@ int main ()
|
||||
Vector2 cellPosition = GetMousePosition();
|
||||
int i = cellPosition.y/CELL_SIZE_PIXELS;
|
||||
int j = cellPosition.x/CELL_SIZE_PIXELS;
|
||||
putCell(grid, i, j, brush);
|
||||
putCell(grid, i, j, brush, brushSize);
|
||||
}
|
||||
if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) {
|
||||
// spawn some text corresponding to Brush Type, fading
|
||||
@@ -80,6 +81,15 @@ int main ()
|
||||
}
|
||||
printf("Brush changed for %d\n", brush);
|
||||
}
|
||||
if (IsKeyPressed(KEY_UP)) {
|
||||
brushSize++;
|
||||
}
|
||||
if (IsKeyPressed(KEY_DOWN) && brushSize > 1) {
|
||||
brushSize--;
|
||||
}
|
||||
if (IsKeyPressed(KEY_C)) {
|
||||
clearGrid(grid);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user