void Parser::parse( const char *str, int len, bool end ) { const char *p = str; const char *pos = p; const char *s = 0;//数据开始位置 const char *e = 0;//数据结束位置 while( len > 0 ) { if( *p == '<' ) { pos = p; if( s ) e = p;//记下数据结束位置 } else if( *p=='>' ) { std::string tag( pos + 1, p - pos - 1 ); reArrange(tag); if( is_version( tag ) ) ;//std::cout << tag << "\n"; else if(is_help(tag)) ; else if( is_end( tag ) ) { if( s && e ) { std::string data( s + 1, e -s - 1 ); on_data( data ); s = e = 0; } on_end( tag ); } else if( is_element( tag ) ) { parse_property( tag ); on_end( tag ); } else { parse_property( tag ); s = p;//记下数据开位置 } } p++; len--; } }
/* ---------------------------------------------------------------------------- * Ticks a timer. * amount: Time to tick. */ void timer::tick(const float amount) { if(time_left == 0.0f) return; time_left = max(time_left - amount, 0.0f); if(time_left == 0.0f && on_end) { on_end(); } }
// ------------------------------------------------------------------------ // class to move army on adventure map // ------------------------------------------------------------------------ void t_army_mover::trigger_event() { t_counted_ptr< t_army_mover > ref = this; bool was_halted = m_halted; if (m_in_trigger) return; t_adventure_map* adventure_map = m_army->get_map(); if (adventure_map->is_game_over()) return; m_in_trigger = true; m_army->trigger_events(); m_in_trigger = false; if (!m_halted) adventure_map->clear_selection(); if (m_halted && !was_halted) on_end(); }
/* ---------------------------------------------------------------------------- * Ticks the fade manager by one frame. */ void fade_manager::tick(const float time) { if(time_left == 0) return; time_left -= time; if(time_left <= 0) { time_left = 0; if(on_end) on_end(); } }
log_target& operator<<(std::ostream&(*rhs)(std::ostream&)) { for(auto& s : _streams) if(*s) *s<<*rhs; if(rhs==static_cast<decltype(rhs)>(std::endl)) on_end(); return *this; }
// ------------------------------------------------------------------------ // class to move army on adventure map // ------------------------------------------------------------------------ void t_army_mover::cancel_move() { if (m_halted) return; t_counted_ptr<t_army_mover> ref = this; t_window_ptr frame = m_window->get_frame(); // temporary reference to prevent the adventure frame // from removing itself if the game is over end_move(); trigger_event(); if (m_has_trigger && m_army->get_position() == m_trigger_point) activate_trigger(); on_end(); }
GLEWContext* context::glew_context() { if(!m_glew_context) { on_begin(); m_glew_context.reset(new GLEWContext()); g_current_glew() = m_glew_context.get(); GLenum err = glewInit(); // needs to be called after context creation if (GLEW_OK != err) { k3d::log() << error << "GLEW init failed: " << glewGetErrorString(err) << std::endl; m_glew_context.reset(); } on_end(); assert(m_glew_context); } return m_glew_context.get(); }
// ------------------------------------------------------------------------ // move the final step in the path // ------------------------------------------------------------------------ void t_army_mover::finish_path() { declare_timer( timer_1, "finish_path" ); end_move(); if (m_has_trigger || m_landing) { //////////////////////////////////////////////////////////// // replay functionality m_army->get_map()->record_look_trigger_event( m_army, m_trigger_point.direction ); //////////////////////////////////////////////////////////// m_army->turn_to( m_trigger_point.direction ); if (m_army->get_position() != m_trigger_point) { assert( m_army->get_position() == m_trigger_point.last_point ); expend_movement( m_trigger_point.move_cost ); } redraw_windows(); if (m_has_trigger) { assert( !m_landing ); declare_timer( timer_4, "Activate trigger" ); trigger_event(); activate_trigger(); } else { assert( m_army->is_boat() ); assert( m_landing ); m_army->leave_boat( m_trigger_point ); trigger_event(); } } else trigger_event(); on_end(); }
void Scene::stop() { m_scene_is_ended = true; on_end(); }
void context::end() { on_end(); g_current() = 0; }