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