revamped sound engine
[fishladder.git] / fishladder.c
index 7520c2c86a0ae261868484d14e84642ed3ea44fc..becb812d88b5bb9b48a800ad8846962b2f7509f6 100644 (file)
@@ -702,6 +702,20 @@ static int map_load( const char *str, const char *name )
                                px[3] = 0;
                        }
                }
+               
+               // Level selection area
+               
+               for( int y = 16+2; y < 16+world.h-2; y ++ )
+               {
+                       for( int x = 14; x < 16; x ++ )
+                       {
+                               u8 *px = &info_buffer[((y*64)+x)*4];
+                               px[0] = 0x10;
+                       }
+               }
+               
+               info_buffer[(((16+world.h-3)*64)+world.w+16-1)*4] = 0x30;
+               info_buffer[(((16+world.h-2)*64)+world.w+16-1)*4] = 0x30;
 
                // Random walks.. kinda
                for( int i = 0; i < arrlen(world.io); i ++ )
@@ -1343,6 +1357,9 @@ void vg_update(void)
                
                world.sim_target = (int)floorf(world.sim_internal_time);
                
+               int success_this_frame = 0;
+               int failure_this_frame = 0;
+               
                while( world.sim_frame < world.sim_target )
                {
                        sfx_set_playrnd( &audio_random, &audio_system_balls_switching, 0, 8 );
@@ -1390,7 +1407,16 @@ void vg_update(void)
                                                        {
                                                                struct terminal_run *run = &term->runs[ world.sim_run ];
                                                                if( run->recv_count < vg_list_size( run->recieved ) )
+                                                               {
+                                                                       if( fish->payload == run->conditions[ run->recv_count ] )
+                                                                               success_this_frame = 1;
+                                                                       else
+                                                                               failure_this_frame = 1;
+                                                               
                                                                        run->recieved[ run->recv_count ++ ] = fish->payload;
+                                                               }
+                                                               else
+                                                                       failure_this_frame = 1;
                                                                
                                                                break;
                                                        }
@@ -1736,6 +1762,21 @@ void vg_update(void)
                        world.sim_frame ++;
                }
                
+               // Sounds
+               if( failure_this_frame )
+               {
+                       sfx_set_play( &audio_tones, &audio_system_balls_extra, 0 );
+               }
+               else if( success_this_frame )
+               {
+                       static int succes_counter = 0;
+                       
+                       sfx_set_play( &audio_tones, &audio_system_balls_extra, 1+(succes_counter++) );
+                       
+                       if( succes_counter == 7 )
+                               succes_counter = 0;
+               }
+               
                // Position update
                // =====================================================================================================
                
@@ -1906,6 +1947,7 @@ static void wbutton_run( enum e_world_button btn_name )
        struct cell_button *btn = &world.buttons[btn_name];
        
        // Interaction
+       int tex_offset = 0;
        
        int is_hovering = (world.tile_x == world.w-1 && world.tile_y == world.h-btn_name-2)?1:0;        
        if( vg_get_button_up( "primary" ) && is_hovering )
@@ -1984,6 +2026,13 @@ static void wbutton_run( enum e_world_button btn_name )
        btn->light = vg_lerpf( btn->light, btn->light_target, vg_time_delta*26.0f );
        
        // Draw
+       if( btn_name == k_world_button_sim && world.buttons[ k_world_button_sim ].pressed )
+       {
+               if( world.buttons[ k_world_button_pause ].pressed )
+                       tex_offset = 3;
+               else
+                       tex_offset = 2;
+       }
        
        v4f final_colour;
        v3_copy( button_colours[ btn_name ], final_colour );
@@ -1992,7 +2041,7 @@ static void wbutton_run( enum e_world_button btn_name )
        glUniform4f( SHADER_UNIFORM( shader_buttons, "uOffset" ), 
                world.w-1, 
                world.h-btn_name-2, 
-               (float)btn_name
+               (float)(btn_name+tex_offset)
                3.0f 
        );
        glUniform4fv( SHADER_UNIFORM( shader_buttons, "uColour" ), 1, final_colour );
@@ -2517,6 +2566,7 @@ ui_data;
 
 void vg_ui(void)
 {
+       /*
        // UI memory
        static int pack_selection = 0;
        static struct pack_info
@@ -2558,7 +2608,7 @@ void vg_ui(void)
                gui_capture_mouse( 9999 );
                gui_fill_rect( ui_global_ctx.cursor, 0xff5a4e4d );
                
-               gui_text( "ASSIGNMENTS", 8, 0 );
+               gui_text( "ASSIGNMENTS", 32, 0 );
                
                ui_global_ctx.cursor[1] += 30;
                ui_global_ctx.cursor[3] = 25;
@@ -2579,7 +2629,7 @@ void vg_ui(void)
                                        pack_selection = i;
                                
                                ui_global_ctx.cursor[1] += 2;
-                               gui_text( pack_is_unlocked? pack_infos[i].name: "???", 4, 0 );
+                               gui_text( pack_is_unlocked? pack_infos[i].name: "???", 24, 0 );
                                gui_end_right();
                                
                                gui_reset_colours();
@@ -2651,18 +2701,18 @@ void vg_ui(void)
                                                }
                                                
                                                ui_global_ctx.override_colour = 0xffffffff;
-                                               gui_text( lvl_info->title, 6, 0 );
+                                               gui_text( lvl_info->title, 24, 0 );
                                                ui_global_ctx.cursor[1] += 18;
-                                               gui_text( lvl_info->completed_score>0? "passed": "incomplete", 4, 0 );
+                                               gui_text( lvl_info->completed_score>0? "passed": "incomplete", 24, 0 );
                                        }
                                        else
                                        {
                                                gui_button( 2 + i );
                                                
                                                ui_global_ctx.override_colour = 0xff786f6f;
-                                               gui_text( "???", 6, 0 );
+                                               gui_text( "???", 24, 0 );
                                                ui_global_ctx.cursor[1] += 18;
-                                               gui_text( "locked", 4, 0 );
+                                               gui_text( "locked", 24, 0 );
                                        }
                                        
                                        gui_end_down();
@@ -2692,7 +2742,7 @@ void vg_ui(void)
                        
                        gui_fill_rect( ui_global_ctx.cursor, 0xff5a4e4d );
                        ui_global_ctx.cursor[1] += 4;
-                       gui_text( ui_data.level_selected->title, 6, 0 );
+                       gui_text( ui_data.level_selected->title, 24, 0 );
                        
                        ui_global_ctx.cursor[1] += 30;
                        ui_rect_pad( ui_global_ctx.cursor, 8 );
@@ -2704,11 +2754,11 @@ void vg_ui(void)
                        }
                        gui_end_down();
                        
-                       ui_text_use_paragraph( &ui_global_ctx );
+                       //ui_text_use_paragraph( &ui_global_ctx );
                        ui_global_ctx.cursor[1] += 2;
                        
-                       gui_text( ui_data.level_selected->description, 5, 0 );
-                       ui_text_use_title( &ui_global_ctx );
+                       gui_text( ui_data.level_selected->description, 16, 0 );
+                       //ui_text_use_title( &ui_global_ctx );
                        
                        // Buttons at the bottom
                        ui_global_ctx.cursor[3] = 25;
@@ -2721,7 +2771,7 @@ void vg_ui(void)
                        {
                                ui_data.level_selected = NULL;
                        }
-                       gui_text( "BACK", 6, k_text_alignment_center );
+                       gui_text( "BACK", 24, k_text_alignment_center );
                        gui_end();
                        
                        gui_align_right();
@@ -2735,7 +2785,7 @@ void vg_ui(void)
                                
                                ui_global_ctx.override_colour = 0xff888888;
                                
-                               gui_text( "RESTORE SOLUTION", 6, k_text_alignment_center );
+                               gui_text( "RESTORE SOLUTION", 24, k_text_alignment_center );
                                gui_end_right();
                                ui_global_ctx.override_colour = 0xffffffff;
                        }
@@ -2755,7 +2805,7 @@ void vg_ui(void)
                                                ui_data.leaderboard_show = 0;
                                        }
                                }
-                               gui_text( "PLAY", 6, k_text_alignment_center );
+                               gui_text( "PLAY", 24, k_text_alignment_center );
                                gui_end();
                        }
                        
@@ -2773,7 +2823,7 @@ void vg_ui(void)
                        gui_new_node();
                        {
                                gui_fill_rect( ui_global_ctx.cursor, 0xff5a4e4d );
-                               gui_text( "FRIEND LEADERBOARD", 6, 0 );
+                               gui_text( "FRIEND LEADERBOARD", 24, 0 );
                        }
                        gui_end_down();
                        
@@ -2794,7 +2844,7 @@ void vg_ui(void)
                                                
                                                // 1,2,3 ...
                                                static const char *places[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
-                                               gui_text( places[i], 7, 0 );
+                                               gui_text( places[i], 24, 0 );
                                                ui_global_ctx.cursor[0] += 32;
                                                
                                                struct leaderboard_player *player = &ui_data.leaderboard_players[i];
@@ -2810,12 +2860,12 @@ void vg_ui(void)
                                                gui_end_right();
                                                
                                                // Players name
-                                               gui_text( player->player_name, 7, 0 );
+                                               gui_text( player->player_name, 24, 0 );
                                                
                                                ui_global_ctx.cursor[2] = 50;
                                                gui_align_right();
                                                
-                                               gui_text( player->score_text, 7, k_text_alignment_right );
+                                               gui_text( player->score_text, 24, k_text_alignment_right );
                                        }
                                        gui_end_down();
                                        
@@ -2825,6 +2875,7 @@ void vg_ui(void)
                        gui_end();
                }
        }
+       */
 }
 
 void leaderboard_dispatch_score(void)