// @topic W010405 FLTK FLUID -- maze navigation v2 // @brief class CWindowMaze implementation void CWindowMaze::cb_btn_right( Fl_Widget* btn, void* userdata ) { CWindowMaze* pwin = static_cast< CWindowMaze* >( userdata ); pwin->m_canvas->turn_head_right(); Fl::redraw(); } void CWindowMaze::cb_btn_left( Fl_Widget* btn, void* userdata ) { CWindowMaze* pwin = static_cast< CWindowMaze* >( userdata ); pwin->m_canvas->turn_head_left(); Fl::redraw(); } /** timer animation */ void CWindowMaze::animation_begin( Fl_Widget* widg, void* userdata ) { CWindowMaze* pwin = static_cast< CWindowMaze* >( userdata ); if ( pwin->m_canvas->animate_door_entry() ) { Fl::add_timeout( TICK_TIMEOUT, animation_continue, userdata ); } } void CWindowMaze::animation_continue( void* userdata ) { CWindowMaze* pwin = static_cast< CWindowMaze* >( userdata ); if ( pwin->m_canvas->animate_door_entry() ) { Fl::redraw(); Fl::add_timeout( TICK_TIMEOUT, animation_continue, userdata ); } else { Fl::redraw(); } } void CWindowMaze::show( Room* entry_room ) { // set the callbacks m_canvas->callback( (Fl_Callback*)animation_begin, (void*)(this) ); m_btn_right->callback( (Fl_Callback*)cb_btn_right, (void*)(this) ); m_btn_left->callback( (Fl_Callback*)cb_btn_left, (void*)(this) ); // configure the canvas widget m_canvas->initialize_room( entry_room ); // display the window m_double_window->show(); }