X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=fishladder.c;h=d66cd2e18780b27eb48890130eeade53a7b0b04c;hb=27f1751d523e9dee4ab00ec10666bbb3d8db74bc;hp=49aa43ad1fe0b727835fd54a503abb1cd4adf196;hpb=3698ffbde4d76d01e61d18c4a1e9254f06ebc652;p=fishladder.git diff --git a/fishladder.c b/fishladder.c index 49aa43a..d66cd2e 100644 --- a/fishladder.c +++ b/fishladder.c @@ -27,6 +27,64 @@ SHADER_DEFINE( shader_tile_colour, UNIFORMS({ "uPv", "uOffset", "uColour" }) ) +const char *level_pack[] = +{ + // Level 0 + "#########;\n" + "###-#####;acac\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "#####+###;acac\n" + "#########;\n", + + // Level 1 + "#########;\n" + "##-###-##;b,b\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "####+####;bb\n" + "#########;\n", + + // Level 2 + "###########;\n" + "#####-#####;bbbbb\n" + "## ##;\n" + "## ###;\n" + "## # ##;\n" + "## ##;\n" + "###+##+####;bbb,bb\n" + "###########;\n", + + // Level 3 + "#############;\n" + "###-#####-###;a,aaa\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "######+######;aaaa\n" + "#############;\n", + + // Level 4 + "#############;\n" + "###-#####-###;aaa,aa\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "## ##;\n" + "###+#####+###;aa,aaa\n" + "#############;\n" +}; + m3x3f m_projection; m3x3f m_view; m3x3f m_mdl; @@ -284,7 +342,7 @@ static struct cell *pcell( v2i pos ) int main( int argc, char *argv[] ) { - vg_init( argc, argv, "FishLadder" ); + vg_init( argc, argv, "Fish (Marbles Computer) Ladder Simulator 2022 | N,M: change level | SPACE: Test | LeftClick: Toggle tile" ); } void vg_register(void) @@ -356,19 +414,7 @@ void vg_start(void) init_mesh( &world.splitter_r, splitter_r, vg_list_size( splitter_r ) ); } - map_load - ( - "#############;\n" - "###-#####-###;aaa,aa\n" - "## ##;\n" - "## ##;\n" - "## ##;\n" - "## ##;\n" - "## ##;\n" - "## ##;\n" - "###+#####+###;aa,aaa\n" - "#############;\n" - ); + map_load( level_pack[ 0 ] ); } void vg_free(void) @@ -468,6 +514,27 @@ static int cell_interactive( v2i co ) void vg_update(void) { + static int curlevel = 0; + int changelvl = curlevel; + if( vg_get_button_down( "prev" ) ) { if( curlevel > 0 ) changelvl --; } + else if( vg_get_button_down( "next" ) ) { if( curlevel < vg_list_size( level_pack )-1 ) changelvl ++; } + + if( changelvl != curlevel ) + { + map_load( level_pack[ changelvl ] ); + curlevel = changelvl; + + // TEMP!!! code dupe + world.simulating = 0; + world.num_fishes = 0; + world.sim_frame = 0; + + for( int i = 0; i < arrlen( world.io ); i ++ ) + world.io[i].recv_count = 0; + + vg_info( "Stopping simulation!\n" ); + } + float ratio = (float)vg_window_y / (float)vg_window_x; float const size = 9.5f; @@ -489,7 +556,7 @@ void vg_update(void) int tile_x = floorf( tile_pos[0] ); int tile_y = floorf( tile_pos[1] ); - + // Tilemap editing if( !world.simulating ) { @@ -615,8 +682,6 @@ void vg_update(void) v2i dirs[] = {{1,0},{-1,0},{0,-1}}; for( int j = 0; j < vg_list_size(dirs); j ++ ) - { - v2i target; if( pcell( (v2i){ posx+dirs[j][0], posy+dirs[j][1] } )->state & FLAG_CANAL ) { fish->dir[0] = dirs[j][0]; @@ -624,7 +689,6 @@ void vg_update(void) can_spawn = 1; break; } - } if( !can_spawn ) world.num_fishes--; @@ -681,7 +745,7 @@ void vg_update(void) else { struct cell *cell_next = pcell( (v2i){ fish->pos[0]+fish->dir[0], fish->pos[1]+fish->dir[1] } ); - if( !(cell_next->state & FLAG_CANAL) ) + if( !(cell_next->state & (FLAG_CANAL|FLAG_OUTPUT)) ) { // Try other directions for valid, so down, left, right.. v2i dirs[] = {{1,0},{-1,0},{0,-1}}; @@ -692,7 +756,7 @@ void vg_update(void) if( (dirs[j][0] == -fish->dir[0]) && (dirs[j][1] == -fish->dir[1]) ) continue; - if( pcell( (v2i){ fish->pos[0]+dirs[j][0], fish->pos[1]+dirs[j][1] } )->state & FLAG_CANAL ) + if( pcell( (v2i){ fish->pos[0]+dirs[j][0], fish->pos[1]+dirs[j][1] } )->state & (FLAG_CANAL|FLAG_OUTPUT) ) { fish->dir[0] = dirs[j][0]; fish->dir[1] = dirs[j][1]; @@ -768,7 +832,7 @@ void vg_render(void) 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.2f, 0.7f, 0.3f, 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] ) @@ -861,6 +925,16 @@ void vg_render(void) draw_mesh( 0, 32 ); } } + + if( world.simulating ) + { + glUniform4f( SHADER_UNIFORM( shader_tile_colour, "uColour" ), 0.0f, 0.0f, 0.0f, 1.0f ); + glUniform3f( SHADER_UNIFORM( shader_tile_colour, "uOffset" ), -0.5f + cosf( vg_time * 4.0f ) * 0.2f, sinf( vg_time * 4.0f ) * 0.2f + (float)world.h * 0.5f, 0.05f ); + draw_mesh( 0, 32 ); + } } -void vg_ui(void){} +void vg_ui(void) +{ + ui_test(); +}