Ignore:
Timestamp:
Jun 26, 2005, 2:52:53 PM (20 years ago)
Author:
darran
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Swollen/swollen/main.cpp

    r114 r115  
    207207
    208208
    209    // animation mode is off to start
     209   // animation
     210   State s = State();
     211   std::vector<State> statelist;
    210212   bool recordingmode = false;
    211 
    212 
    213    // test state
    214    State* s = new State;
    215    std::vector<State>* statelist = new std::vector<State>;
     213   bool playbackmode = false;
     214   unsigned int playback_index = 0;
     215
     216
    216217 
    217218   unsigned int timestep = 0;
     
    223224
    224225
    225       // current time
    226       double time = viewer.getFrameStamp()->getReferenceTime();
    227 
    228       // advance sww frame?
    229       event_handler->setTime( time );
    230       if( event_handler->timestepChanged() )
     226      if( !playbackmode )
    231227      {
     228
     229         // current time
     230         double time = viewer.getFrameStamp()->getReferenceTime();
     231
     232
     233         event_handler->setTime( time );
    232234         timestep = event_handler->getTimestep();
    233235         water->setTimeStep(timestep);
    234236         hud->setTime( sww->getTime(timestep) );
     237
     238
     239         // events
     240         if( event_handler->toggleWireframe() )
     241            water->toggleWireframe();
     242
     243         if( event_handler->toggleCulling() )
     244         {
     245            sww->toggleCulling();
     246            water->setTimeStep(timestep);  // refresh
     247         }
     248
     249
     250         // '1' key starts/stops recording of view/position/setting info
     251         if( event_handler->toggleRecording() )
     252         {
     253            switch( recordingmode )
     254            {
     255               case false :
     256                  recordingmode = true;
     257                  hud->setRecordingMode("recording");
     258                  break;
     259               case true :
     260                  recordingmode = false;
     261                  hud->setRecordingMode("");
     262                  break;
     263            }
     264         }
     265
     266
     267         // '2' key starts playback of recorded frames
     268         if( event_handler->togglePlayback() )
     269         {
     270            recordingmode = false;
     271            switch( playbackmode )
     272            {
     273               case false :
     274                  playbackmode = true;
     275                  hud->setRecordingMode("playback");
     276                  event_handler->setPaused( true );
     277                  playback_index = 0;
     278                  // store current state
     279                  break;
     280               case true :
     281                  playbackmode = false;
     282                  hud->setRecordingMode("");
     283                  event_handler->setPaused( false );
     284                  // pop saved state
     285                  break;
     286            }
     287         }
     288
     289
     290         if( recordingmode )
     291         {
     292            s.setTimestep( event_handler->getTimestep() );
     293            s.setTime( sww->getTime(timestep) );
     294            s.setCulling( sww->getCulling() );
     295            s.setWireframe( water->getWireframe() );
     296            s.setPosition( viewer.getPosition() );
     297            s.setOrientation( viewer.getOrientation() );
     298            statelist.push_back( s );
     299            std::cout << "len(statelist): " << statelist.size() << std::endl;
     300         }
    235301      }
    236302
    237       // events
    238       if( event_handler->toggleWireframe() )
    239          water->toggleWireframe();
    240 
    241       if( event_handler->toggleCulling() )
     303      else
     304
    242305      {
    243          sww->toggleCulling();
    244          water->setTimeStep(timestep);  // refresh
     306         // in playback mode
     307         s = statelist.at( playback_index );
     308         water->setTimeStep( s.getTimestep() );
     309         hud->setTime( s.getTime() );
     310
     311         std::cout << "playing back: " << playback_index << std::endl;
     312
     313         // loop playback
     314         playback_index ++;
     315         if( playback_index == statelist.size() )
     316            playback_index = 0;
    245317      }
    246318
    247       /*
    248         Finite State Machine for animation
    249      
    250         0 1 1 begin storing view/orientation/cull settings
    251         0 2 2 if exists, store current settings, commence playback of saved animation path
    252         0 3 0 save animation to disk
    253 
    254         1 1 0 stop storing settings
    255         1 2 2 stop storing settings and commence playback
    256         1 3 1 save animation, keep recording
    257 
    258         2 2 0 stop playback, return to saved settings
    259         2 1 2 no effect
    260         2 3 2 save animation, continue playing back
    261 
    262         header comprised of original command line arguments
    263 
    264         state comprised of:
    265            frame
    266            elapsedtime
    267            position
    268            orientation
    269            timestep
    270            cullsteep
    271            wireframe
    272  
    273       */
    274 
    275 
    276       if( event_handler->toggleRecording() )
    277       {
    278          switch( recordingmode )
    279          {
    280             case false :
    281                recordingmode = true;
    282                hud->setRecordingMode("recording");
    283                break;
    284             case true :
    285                recordingmode = false;
    286                hud->setRecordingMode("");
    287                break;
    288          }
    289 
    290       }
    291 
    292       if( recordingmode )
    293       {
    294          s->setTimestep( event_handler->getTimestep() );
    295          s->setTime( sww->getTime(timestep) );
    296          s->setCulling( sww->getCulling() );
    297          s->setWireframe( water->getWireframe() );
    298          s->setPosition( viewer.getPosition() );
    299          s->setOrientation( viewer.getOrientation() );
    300          statelist->push_back( *s );
    301       }
    302 
    303       //s.write( std::cout );
    304319
    305320
    306321      // update the scene by traversing with the update visitor
    307322      viewer.update();
    308          
     323
    309324      // fire off the cull and draw traversals of the scene.
    310325      viewer.frame();
Note: See TracChangeset for help on using the changeset viewer.