Merge branch 'master' of harrygodden.com:/home/fishladder into master
[fishladder.git] / fishladder.c
index b95248c0d76443f19c2015fe3626f829bd89b2a8..d7b887d2f602bc62b0a7a2f03cb9af134a8e0cd6 100644 (file)
@@ -5,35 +5,6 @@
 #include "vg/vg.h"
 #include "fishladder_resources.h"
 
-/*
-       Todo for release:
-               Tutorial levels:
-                       1. Transport
-                       2. Split
-                       3. Merge (and explode)
-                       4. Principle 1 (divide colours)
-                       5. Principle 2 (combine colours)
-                       
-               Trainee levels:
-                       Simple maths                    (x3)
-                       Colour ordering                 (x2)
-                       Routing problems                (x2)
-                       
-               Medium levels:
-                       Reverse order
-               
-               New things to program:
-                       UI text element renderer (SDF)                          DONE(sorta)
-                       Particle system thing for ball collision        
-                       Level descriptions / titles                                     HALF
-                       Row Gridlines for I/O                                                   DONE
-                       Play button / Speed controller                          PLAY/PAUSED.. todo: speed, wire connecty
-                       
-                       
-       After release:
-               
-*/
-
 // CONSTANTS
 // ===========================================================================================================
 
@@ -1060,6 +1031,12 @@ static int is_simulation_running(void)
        return world.buttons[ k_world_button_sim ].pressed;
 }
 
+static void clear_animation_flags(void)
+{
+       for( int i = 0; i < world.w*world.h; i ++ )
+               world.data[ i ].state &= ~(FLAG_FLIP_FLOP|FLAG_FLIP_ROTATING);
+}
+
 static void simulation_stop(void)
 {
        world.buttons[ k_world_button_sim ].pressed = 0;
@@ -1068,14 +1045,40 @@ static void simulation_stop(void)
        world.num_fishes = 0;
        world.sim_frame = 0;
        world.sim_run = 0;
+       world.frame_lerp = 0.0f;
        
        io_reset();
        
        sfx_system_fadeout( &audio_system_balls_rolling, 44100 );
        
+       clear_animation_flags();
+       
        vg_info( "Stopping simulation!\n" );
 }
 
+static void simulation_start(void)
+{
+       vg_success( "Starting simulation!\n" );
+                               
+       sfx_set_playrnd( &audio_rolls, &audio_system_balls_rolling, 0, 1 );
+       
+       world.num_fishes = 0;
+       world.sim_frame = 0;
+       world.sim_run = 0;
+       
+       world.sim_delta_speed = 2.5f;
+       world.sim_delta_ref = vg_time;
+       world.sim_internal_ref = 0.0f;
+       world.sim_internal_time = 0.0f;
+       world.pause_offset_target = 0.0f;
+       
+       world.sim_target = 0;
+       
+       clear_animation_flags();
+       
+       io_reset();
+}
+
 static int world_check_pos_ok( v2i co )
 {
        return (co[0] < 2 || co[0] >= world.w-2 || co[1] < 2 || co[1] >= world.h-2)? 0: 1;
@@ -1888,30 +1891,6 @@ static void draw_numbers( v3f coord, int number )
        }
 }*/
 
-static void simulation_start(void)
-{
-       vg_success( "Starting simulation!\n" );
-                               
-       sfx_set_playrnd( &audio_rolls, &audio_system_balls_rolling, 0, 1 );
-       
-       world.num_fishes = 0;
-       world.sim_frame = 0;
-       world.sim_run = 0;
-       
-       world.sim_delta_speed = 2.5f;
-       world.sim_delta_ref = vg_time;
-       world.sim_internal_ref = 0.0f;
-       world.sim_internal_time = 0.0f;
-       world.pause_offset_target = 0.0f;
-       
-       world.sim_target = 0;
-       
-       for( int i = 0; i < world.w*world.h; i ++ )
-               world.data[ i ].state &= ~FLAG_FLIP_FLOP;
-       
-       io_reset();
-}
-
 static void wbutton_run( enum e_world_button btn_name )
 {
        static v3f button_colours[] = {