X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=fishladder.c;h=9e02a95ed1829b4ceb1418f183ff0da6bba28218;hb=a1225e30bb441190dfb7d2003590d558276cfbe4;hp=ce43fa27bc29108473e17010c9b8efa85b6363df;hpb=c8165f11120b296045f670bbdd8e614e92b0c5e8;p=fishladder.git diff --git a/fishladder.c b/fishladder.c index ce43fa2..9e02a95 100644 --- a/fishladder.c +++ b/fishladder.c @@ -157,6 +157,31 @@ m3x3f m_mdl; #define FLAG_FLIP_FLOP 0x100 #define FLAG_FLIP_ROTATING 0x200 +/* + 0000 0 | 0001 1 | 0010 2 | 0011 3 + | | | | | + X | X= | X | X= + | | | + 0100 4 | 0101 5 | 0110 6 | 0111 7 + | | | | | + =X | =X= | =X | =X= + | | | + 1000 8 | 1001 9 | 1010 10 | 1011 11 + | | | | | + X | X= | X | X= + | | | | | | | + 1100 12 | 1101 13 | 1110 14 | 1111 15 + | | | | | + =X | =X= | =X | =X= + | | | | | | | +*/ + +enum cell_type +{ + k_cell_type_split = 7, + k_cell_type_merge = 13 +}; + v3f colour_sets[] = { { 0.9f, 0.2f, 0.01f }, { 0.2f, 0.9f, 0.14f }, @@ -243,7 +268,7 @@ struct world u32 w, h; - struct mesh tile, circle, splitter_l, splitter_r; + struct mesh tile, circle; int selected; @@ -458,21 +483,6 @@ void vg_start(void) init_mesh( &world.circle, circle_mesh, vg_list_size( circle_mesh ) ); } - // splitters (temp) - { - float splitter_l[] = - { - #include "models/splitter_l.obj.h" - }; - float splitter_r[] = - { - #include "models/splitter_r.obj.h" - }; - - init_mesh( &world.splitter_l, splitter_l, vg_list_size( splitter_l ) ); - init_mesh( &world.splitter_r, splitter_r, vg_list_size( splitter_r ) ); - } - // Textures { tex_tile_detail = vg_tex2d_rgba( "textures/tile_overlays.png" ); @@ -498,9 +508,7 @@ void vg_free(void) { free_mesh( &world.tile ); free_mesh( &world.circle ); - free_mesh( &world.splitter_l ); - free_mesh( &world.splitter_r ); - + map_free(); glDeleteTextures( 1, &tex_tile_data ); @@ -722,13 +730,13 @@ void vg_update(void) u8 config = pcell((v2i){x,y})->config; - if( config == 0x7 ) // splitter + if( config == k_cell_type_split ) // splitter { struct cell *cell = pcell((v2i){x,y}); cell->state |= (FLAG_SPLIT | FLAG_DROP_L | FLAG_DROP_R); } - else if( config == 0xD ) + else if( config == k_cell_type_merge ) { world.data[y*world.w+x-1].state |= FLAG_DROP_R; world.data[y*world.w+x+1].state |= FLAG_DROP_L; @@ -782,7 +790,7 @@ void vg_update(void) for( int i = 0; i < world.h*world.w; i ++ ) { struct cell *cell = &world.data[i]; - if( cell->config == 0x7 ) + if( cell->config == k_cell_type_split ) { cell->state &= ~FLAG_FLIP_ROTATING; } @@ -861,7 +869,8 @@ void vg_update(void) fish->pos[1] += fish->dir[1]; struct cell *cell_entry = pcell( fish->pos ); - if( cell_entry->config == 0x7 ) + + if( cell_entry->config == k_cell_type_split ) cell_entry->state |= FLAG_FLIP_ROTATING; } } @@ -887,73 +896,6 @@ void vg_render(void) frame_lerp = scaled_time - (float)world.sim_frame; } - // Shadow layer - /* - glUniform4f( SHADER_UNIFORM( shader_tile_colour, "uColour" ), 0.5f, 0.5f, 0.5f, 1.0f ); - for( int y = 0; y < world.h; y ++ ) - for( int x = 0; x < world.w; x ++ ) - { - struct cell *cell = pcell((v2i){x,y}); - - if( cell->state & FLAG_CANAL ) - { - continue; - } - - glUniform3f( SHADER_UNIFORM( shader_tile_colour, "uOffset" ), (float)x - 0.2f, (float)y - 0.15f, 1.0f ); - draw_mesh( 0, 2 ); - } - - for( int y = 0; y < world.h; y ++ ) - { - for( int x = 0; x < world.w; x ++ ) - { - struct cell *cell = pcell((v2i){x,y}); - int selected = world.selected == y*world.w + x; - - if( cell->state & FLAG_SPLIT ) - { - glUniform4f( SHADER_UNIFORM( shader_tile_colour, "uColour" ), 0.9f, 0.9f, 0.9f, 1.0f ); - glUniform3f( SHADER_UNIFORM( shader_tile_colour, "uOffset" ), (float)x, (float)y, 1.0f ); - - struct mesh *splitter = cell->state & FLAG_FLIP_FLOP? &world.splitter_r: &world.splitter_l; - - use_mesh( splitter ); - draw_mesh( 0, splitter->elements ); - use_mesh( &world.tile ); - } - - if( (cell->state & FLAG_CANAL) && !selected ) - continue; - - glUniform3f( SHADER_UNIFORM( shader_tile_colour, "uOffset" ), (float)x, (float)y, 1.0f ); - - v4f colour; - - if( cell->state & FLAG_WALL ) { v4_copy( (v4f){ 0.2f, 0.2f, 0.2f, 1.0f }, colour ); } - else if( cell->state & FLAG_CANAL ) { v4_copy( (v4f){ 0.6f, 0.6f, 0.6f, 1.0f }, colour ); } - else if( cell->state & FLAG_INPUT ) { v4_copy( (v4f){ 0.5f, 0.5f, 0.5f, 1.0f }, colour ); } - else if( cell->state & FLAG_OUTPUT ) { v4_copy( (v4f){ 0.4f, 0.4f, 0.4f, 1.0f }, colour ); } - else v4_copy( (v4f){ 0.9f, 0.9f, 0.9f, 1.0f }, colour ); - - //if( cell->water[world.frame&0x1] ) - // v4_copy( (v4f){ 0.2f, 0.3f, 0.7f * (float)(cell->water[world.frame&0x1]) * (1.0f/16.0f), 1.0f }, colour ); - - if( selected ) - v3_muls( colour, sinf( vg_time )*0.25f + 0.5f, colour ); - - //if( cell->state & (FLAG_SPLIT) ) - // v4_copy( (v4f){ 0.75f, 0.75f, 0.02f, 1.0f }, colour ); - //if( cell->state & (FLAG_MERGER) ) - // v4_copy( (v4f){ 0.75f, 0.02f, 0.75f, 1.0f }, colour ); - - glUniform4fv( SHADER_UNIFORM( shader_tile_colour, "uColour" ), 1, colour ); - - draw_mesh( 0, 2 ); - } - } - */ - v2f const curve_3[] = {{0.5f,1.0f},{0.5f,0.625f},{0.625f,0.5f},{1.0f,0.5f}}; v2f const curve_6[] = {{0.5f,1.0f},{0.5f,0.625f},{0.375f,0.5f},{0.0f,0.5f}}; v2f const curve_9[] = {{1.0f,0.5f},{0.625f,0.5f},{0.5f,0.375f},{0.5f,0.0f}}; @@ -990,25 +932,6 @@ void vg_render(void) struct cell *cell = pcell((v2i){x,y}); int selected = world.selected == y*world.w + x; - /* - 0000 0 | 0001 1 | 0010 2 | 0011 3 - | | | | | - X | X= | X | X= - | | | - 0100 4 | 0101 5 | 0110 6 | 0111 7 - | | | | | - =X | =X= | =X | =X= - | | | - 1000 8 | 1001 9 | 1010 10 | 1011 11 - | | | | | - X | X= | X | X= - | | | | | | | - 1100 12 | 1101 13 | 1110 14 | 1111 15 - | | | | | - =X | =X= | =X | =X= - | | | | | | | - */ - int tile_offsets[][2] = { {2, 0}, {0, 3}, {0, 2}, {2, 2}, @@ -1177,7 +1100,6 @@ void vg_render(void) if( curve ) { - // bezier thing float t2 = t * t; float t3 = t * t * t; @@ -1200,8 +1122,8 @@ void vg_render(void) fish_pos[1] = origin[1] + (float)fish->dir[1]*t; } - vg_line_box( (v2f){fish->pos[0],fish->pos[1]}, - (v2f){ (float)fish->pos[0]+1.0f, (float)fish->pos[1]+1.0f }, 0xffffffff ); + //vg_line_box( (v2f){fish->pos[0],fish->pos[1]}, + //(v2f){ (float)fish->pos[0]+1.0f, (float)fish->pos[1]+1.0f }, 0xffffffff ); glUniform3f( SHADER_UNIFORM( shader_tile_colour, "uOffset" ), fish_pos[0], fish_pos[1], 0.125f ); draw_mesh( 0, 32 );