/**
 * \brief Render the players oxygen.
 * \param e (out) The scene elements.
 */
void ptb::throwable_item_component::render( scene_element_list& e ) const
{
  bear::visual::coordinate_type pos_y = height() / 2;

  bear::visual::scene_sprite s1
    ( get_render_position().x, 
      ( pos_y - m_throwable_item_animation.get_sprite().height() ) / 2 + 
      get_render_position().y, 
      m_throwable_item_animation.get_sprite());

  bear::visual::scene_writing s2
    ( get_render_position().x + 
      m_throwable_item_animation.get_max_size().x + s_margin, 
      ( pos_y - m_throwable_item.get_height() ) / 2 + 
      get_render_position().y , m_throwable_item );

  e.push_back( s1 );
  e.push_back( s2 );

  floating_bonus_list::const_iterator it;
  for ( it = m_floating_bonus.begin(); 
	it != m_floating_bonus.end(); ++it )
    {
      bear::visual::scene_sprite sp2
	( it->get_position().x, it->get_position().y, 
          get_level_globals().auto_sprite( "gfx/ui/ui-1.png", it->get_name() ));
      e.push_back( sp2 );
    } 
} // throwable_item_component::render()
/**
 * \brief Render the players oxygen.
 * \param e (out) The scene elements.
 */
void ptb::honeypots_component::render( scene_element_list& e ) const
{
  for ( unsigned int i = 0; i != m_last_count; ++i )
    e.push_back
      ( bear::visual::scene_sprite
	( get_render_position().x + i * (s_margin + m_honeypot.width()), 
	  get_render_position().y, m_honeypot) );
} // honeypots_component::render()
Beispiel #3
0
/**
 * \brief Render the component.
 * \param e (out) The scene elements.
 */
void tunnel::energy_component::render( scene_element_list& e ) const
{
  unsigned int nb = game_variables::get_energy();

  for ( unsigned int i = 0; i < 5; ++i )
    {
      bear::visual::scene_sprite s
        ( get_render_position().x + 2 + i * (m_sprite.width() + s_margin ),
          get_render_position().y, m_sprite);
      if ( i >= nb )
        s.get_rendering_attributes().set_color
          (bear::visual::color_type("#000000"));
      e.push_back( s ); 
    } 
} // energy_component::render()
/**
 * \brief The fonction called when there is a new bonus.
 * \param animation The name of the new bonus. */
void ptb::throwable_item_component::create_floating_bonus
( const std::string& name )
{
  bear::visual::animation anim =
    get_level_globals().auto_sprite( "gfx/ui/ui-1.png", name );

  bear::visual::position_type rate(0,0);
  if ( get_player() != NULL )
    {
      rate.x = 
        ( get_player().get_left() - 
          get_player().get_level().get_camera_center().x) /
        get_player().get_level().get_camera()->get_width();
      rate.y = 
        ( get_player().get_bottom() - 
          get_player().get_level().get_camera_center().y) /
        get_player().get_level().get_camera()->get_height();
    }

  bear::visual::position_type pos(get_layer_size()/2);
  pos.x += ( rate.x * get_layer_size().x);
  pos.y += ( rate.y * get_layer_size().y);
  
  if ( ( pos.x <= get_layer_size().x ) && ( pos.y <= get_layer_size().y ) && 
       ( pos.x + anim.width() >= 0 ) && 
       ( pos.y + anim.height() >= 0 ) )
    {
      floating_bonus f(name);

      m_floating_bonus.push_back(f);
      m_floating_bonus.back().set_position
        ( pos - anim.get_size()/2, 
          get_render_position() - anim.get_size()/2);
    }
} // throwable_item_component::create_floating_bonus
Beispiel #5
0
/**
 * \brief Render the component.
 * \param e (out) The scene elements.
 */
void rp::score_component::render( scene_element_list& e ) const
{
  if ( ! game_variables::is_level_ending() )
    {
      bear::visual::scene_writing s
        ( get_render_position().x + ( width() - m_score.get_width() ) / 2,
          get_render_position().y + ( height() - m_score.get_height() ) / 2,
          m_score );

      e.push_back( s );
    }

  floating_score_list::const_iterator it;
  for ( it = m_floating_score.begin();
	it != m_floating_score.end(); ++it )
    it->render(e);
} // score_component::render()
Beispiel #6
0
/**
 * \brief Render the component.
 * \param e (out) The scene elements.
 */
void rp::balloon_component::render( scene_element_list& e ) const
{
  if ( game_variables::is_level_ending() )
    return;

  const double current_scale( height() / m_balloon.get_height() );
  const double required_scale( current_scale * 0.75 );

  const double required_left_position
    ( get_render_position().x + width()
      - m_required_balloon.get_width() * required_scale );

  bear::visual::scene_writing required
    ( required_left_position,
      get_render_position().y - 0 * ( height() * (1 - required_scale) ),
      m_required_balloon );

  required.set_scale_factor( required_scale, required_scale );

  required.set_shadow( 1, -1 );
  required.set_shadow_opacity( 0.6 );

  e.push_back( required );

  bear::visual::scene_writing current
    ( required_left_position - m_balloon.get_width() * current_scale,
      get_render_position().y,
      m_balloon );

  current.set_scale_factor( current_scale, current_scale );

  current.set_shadow( 2, -2 );
  current.set_shadow_opacity( 0.6 );

  e.push_back( current );
} // balloon_component::render()
Beispiel #7
0
/**
 * \brief Render the component.
 * \param e (out) The scene elements.
 */
void rp::boss_component::render( scene_element_list& e ) const
{
  if ( ! game_variables::is_level_ending() )
    {
      unsigned int nb = game_variables::get_boss_hits();
      bear::visual::position_type pos = get_render_position();

      for ( unsigned int i = 0; i != 3; i++ )
        {
          bear::visual::scene_sprite s( pos.x, pos.y, m_sprite);
          if ( nb > i )
            s.get_rendering_attributes().set_intensity(0,0,0);
          e.push_back( s ); 
          
          pos.x += m_sprite.width() + s_margin;
        }
    }
} // boss_component::render()
/**
 * \brief Create a floating corrupting_bonus.
 */
void ptb::corrupting_bonus_component::create_floating_corrupting_bonus()
{
  bear::visual::position_type pos(get_layer_size()/2);
  pos.x += 
    ( game_variables::get_corrupting_bonus_rate_x() * get_layer_size().x);
  pos.y += 
    ( game_variables::get_corrupting_bonus_rate_y() * get_layer_size().y);
  
  if ( ( pos.x <= get_layer_size().x ) && ( pos.y <= get_layer_size().y ) && 
       ( pos.x + m_corrupting_bonus.width() >= 0 ) && 
       ( pos.y + m_corrupting_bonus.height() >= 0 ) )
    {
      floating_corrupting_bonus f;

      m_floating_corrupting_bonus.push_back(f);
      m_floating_corrupting_bonus.back().set_position
        (pos, get_render_position());
    }
  else
    on_corrupting_bonus_added();
} // corrupting_bonus_component::create_floating_corrupting_bonus()
Beispiel #9
0
/**
 * \brief The fonction called when new_score game variable changes.
 * \param value The value of the variable new_score.
 */
void rp::score_component::on_new_score(bool value)
{
  if ( value )
    {
      bear::visual::position_type pos(get_layer_size()/2);
      pos.x +=
        ( game_variables::get_score_rate_x() * get_layer_size().x);
      pos.y +=
        ( game_variables::get_score_rate_y() * get_layer_size().y);

      bear::visual::position_type end_pos(pos);
      end_pos.y = get_layer_size().y;

      floating_score_component f(get_level_globals());

      m_floating_score.push_back(f);
      m_floating_score.back().set_position
        (pos, get_render_position() +
         bear::universe::position_type( width() / 2, 0 ) );

      game_variables::set_new_score(false);
    }
} // score_component::on_new_score()
/**
 * \brief Render the players oxygen.
 * \param e (out) The scene elements.
 */
void ptb::corrupting_bonus_component::render( scene_element_list& e ) const
{
  if ( m_corrupting_bonus.empty() )
    return;

  bear::universe::position_type pos(get_render_position());
  bear::visual::scene_sprite sp( 0, 0, m_corrupting_bonus.get_sprite() );

  //sp.set_scale_factor(m_corrupting_bonus_scale, m_corrupting_bonus_scale);
  sp.set_position
    ( pos.x + (m_corrupting_bonus.width() - sp.get_bounding_box().width()) / 2,
      pos.y + (height() - sp.get_bounding_box().height()) / 2 );
  e.push_back( sp );

  pos.x += m_corrupting_bonus.width() + s_margin;

  bear::visual::scene_writing s( 0, 0, m_text_corrupting_bonus );
  //s.set_scale_factor(m_corrupting_bonus_scale, m_corrupting_bonus_scale);
  s.set_position
    ( pos.x
      + ( m_text_corrupting_bonus.get_width()
          - s.get_bounding_box().width() ) / 2,
      pos.y + (height() - s.get_bounding_box().height()) / 2 );

  e.push_back( s );
  
  floating_corrupting_bonus_list::const_iterator it;
  for ( it = m_floating_corrupting_bonus.begin(); 
	it != m_floating_corrupting_bonus.end(); ++it )
    {
      bear::visual::scene_sprite sp2
	( it->get_position().x, it->get_position().y, 
	  m_corrupting_bonus.get_sprite() );
      e.push_back( sp2 );
    } 
} // corrupting_bonus_component::render()
/**
 * \brief Render the players oxygen.
 * \param e (out) The scene elements.
 */
void ptb::score_component::render( scene_element_list& e ) const
{
  bear::visual::scene_writing s1
    ( get_render_position().x, get_render_position().y, m_score );
  e.push_back( s1 );
} // score_component::render()