Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
add df streaming
  • Loading branch information
tene committed Mar 24, 2012
1 parent 2c592de commit ae131a8
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 19 deletions.
64 changes: 50 additions & 14 deletions gridfluid.c
Expand Up @@ -7,8 +7,8 @@ typedef struct gridfluid_cell {
} gridfluid_cell_t;

struct gridfluid {
uint8_t x;
uint8_t y;
size_t x;
size_t y;
float gravity;
gridfluid_cell_t *grid;
gridfluid_cell_t *nextgrid;
Expand All @@ -27,17 +27,50 @@ static const uint8_t rindex[9] = {
0,3,4,1,2,7,8,5,6
};

#define GF_CELL(gf,cx,cy) (gf->grid[cx + cy*gf->x])
#define GF_CELL(gf,cx,cy) (gf->grid[(cx) + (cy)*gf->x])
#define GF_NEXTCELL(gf,cx,cy) (gf->nextgrid[(cx) + (cy)*gf->x])

gridfluid_t gridfluid_create_empty_scene(uint8_t x, uint8_t y) {
void gridfluid_stream(gridfluid_t gf) {
for (size_t x = 0; x < gf->x; x++) {
for (size_t y = 0; y < gf->y; y++) {
gridfluid_cell_t *source = &GF_CELL(gf,x,y);
gridfluid_cell_t *dest = &GF_NEXTCELL(gf,x,y);
if (source->flags != GF_FLUID) {
*dest = *source;
continue;
}
dest->flags = source->flags;
for (size_t i=1; i<9; i++) {
int8_t dx = velocities[i][0];
int8_t dy = velocities[i][1];
gridfluid_cell_t *neigh = &GF_CELL(gf,x+dx,y+dy);
switch(neigh->flags) {
case GF_OBSTACLE:
dest->df[i] = source->df[rindex[i]];
break;
case GF_FLUID:
dest->df[i] = neigh->df[i];
break;
default:
break;
}
}
}
}
}

void gridfluid_collide(gridfluid_t gf) {
}

gridfluid_t gridfluid_create_empty_scene(size_t x, size_t y) {
gridfluid_t gf = calloc(1, sizeof(struct gridfluid));
gf->x = x;
gf->y = y;
gf->grid = calloc(x*y, sizeof(gridfluid_cell_t));
gf->nextgrid = calloc(x*y, sizeof(gridfluid_cell_t));
for (uint8_t i = 1; i < x-1; i++) {
for (uint8_t j = 1; j < y-1; j++) {
gridfluid_set_empty(gf, i, j);
for (size_t i = 1; i < x-1; i++) {
for (size_t j = 1; j < y-1; j++) {
gridfluid_set_fluid(gf, i, j);
}
}
return(gf);
Expand All @@ -48,27 +81,30 @@ void gridfluid_free(gridfluid_t gf) {
free(gf);
}

void gridfluid_set_obstacle(gridfluid_t gf, uint8_t x, uint8_t y) {
void gridfluid_set_obstacle(gridfluid_t gf, size_t x, size_t y) {
GF_CELL(gf,x,y).flags = GF_OBSTACLE;
}

void gridfluid_set_fluid(gridfluid_t gf, uint8_t x, uint8_t y) {
// set DFs
GF_CELL(gf,x,y).flags = GF_FLUID;
void gridfluid_set_fluid(gridfluid_t gf, size_t x, size_t y) {
gridfluid_cell_t *cell = &GF_CELL(gf,x,y);
for (size_t i = 0; i<9; i++) {
cell->df[i] = 1;
}
cell->flags = GF_FLUID;
}

void gridfluid_set_empty(gridfluid_t gf, uint8_t x, uint8_t y) {
void gridfluid_set_empty(gridfluid_t gf, size_t x, size_t y) {
GF_CELL(gf,x,y).flags = GF_EMPTY;
}

void gridfluid_set_gravity(gridfluid_t gf, float g) {
gf->gravity = g;
}

uint8_t gridfluid_get_type(gridfluid_t gf, uint8_t x, uint8_t y) {
uint8_t gridfluid_get_type(gridfluid_t gf, size_t x, size_t y) {
return( GF_CELL(gf,x,y).flags );
}

void gridfluid_step(gridfluid_t gf) {
abort();
gridfluid_stream(gf);
}
11 changes: 6 additions & 5 deletions gridfluid.h
Expand Up @@ -2,6 +2,7 @@
#define GRIDFLUID_H_INCLUDED

#include <stdint.h>
#include <stddef.h>

#pragma GCC visibility push(default)

Expand All @@ -14,15 +15,15 @@ typedef enum e_gridfluid_state {

typedef struct gridfluid *gridfluid_t;

gridfluid_t gridfluid_create_empty_scene(uint8_t x, uint8_t y);
gridfluid_t gridfluid_create_empty_scene(size_t x, size_t y);

void gridfluid_free(gridfluid_t gf);

void gridfluid_set_obstacle(gridfluid_t gf, uint8_t x, uint8_t y);
void gridfluid_set_fluid(gridfluid_t gf, uint8_t x, uint8_t y);
void gridfluid_set_empty(gridfluid_t gf, uint8_t x, uint8_t y);
void gridfluid_set_obstacle(gridfluid_t gf, size_t x, size_t y);
void gridfluid_set_fluid(gridfluid_t gf, size_t x, size_t y);
void gridfluid_set_empty(gridfluid_t gf, size_t x, size_t y);
void gridfluid_set_gravity(gridfluid_t gf, float g);
uint8_t gridfluid_get_type(gridfluid_t gf, uint8_t x, uint8_t y);
uint8_t gridfluid_get_type(gridfluid_t gf, size_t x, size_t y);

void gridfluid_step(gridfluid_t gf);

Expand Down
1 change: 1 addition & 0 deletions test.c
Expand Up @@ -47,6 +47,7 @@ int main() {
unsigned char buf[1];
int running = 1;
while (running) {
gridfluid_step(gf);
render(gf);
curs_xy(10,30);
set_fg(rgb_f(1,1,1));
Expand Down

0 comments on commit ae131a8

Please sign in to comment.