Beispiel #1
0
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();
    }
}
Beispiel #3
0
// ------------------------------------------------------------------------
// 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();
    }
}
Beispiel #5
0
		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;
		}
Beispiel #6
0
// ------------------------------------------------------------------------
// 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();
}
Beispiel #7
0
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();
}
Beispiel #8
0
// ------------------------------------------------------------------------
// 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();
}
Beispiel #9
0
	void Scene::stop() {
		m_scene_is_ended = true;
		on_end();
	}
Beispiel #10
0
void context::end()
{
	on_end();
	g_current() = 0;
}