Пример #1
0
/**
 * \brief Inform the item tat he is entering the active region.
 */
void rp::switching::enters_active_region()
{
  super::enters_active_region();

  if ( m_initial_state != get_current_action_name() )
    {
      if ( get_current_action_name() == "up" && 
           m_initial_state == "down" )
        start_model_action("move down");
      else if ( get_current_action_name() == "down" && 
                m_initial_state == "up" )
        start_model_action("move up");
    }
} // switching::enters_active_region()
Пример #2
0
/**
 * \brief Progress in the state scome_back.
 */
void ptb::gorilla::progress_come_back(bear::universe::time_type elapsed_time)
{
  get_rendering_attributes().mirror(get_left() >= m_origin_position.x );

  if ( scan(get_rendering_attributes().is_mirrored(), m_scan_distance) )
    choose_angry_action();
  else if ( std::abs(get_left() - m_origin_position.x) < 10 )
    start_model_action("idle");
  else if ( has_right_contact() || has_left_contact() )
    start_model_action("idle");
  else if ( get_rendering_attributes().is_mirrored() )
    add_internal_force( bear::universe::force_type(-70000, 0) );
  else
    add_internal_force( bear::universe::force_type(70000, 0) );
} // gorilla::progress_come_back()
Пример #3
0
/**
 * \brief Do post creation actions.
 */
void rp::bonus::on_enters_layer()
{
    super::on_enters_layer();

    set_model_actor( get_level_globals().get_model("model/bonus.cm") );
    if ( m_type == cart_element )
    {
        start_model_action("cart_element");
        init_mark("middle");
        init_mark("back");
        init_mark("front");
    }
    else if ( m_type == plunger )
        start_model_action("plunger");
} // bonus::on_enters_layer()
Пример #4
0
/**
 * \brief Function called when the explosition starts.
 */
void rp::zeppelin::explose()
{ 
  set_transportability(false);
  kill_interactive_item();
  drop();
  m_hit = true;
  util::create_floating_score(*this,750);

  bear::universe::position_type pos = get_center_of_mass();
  pos.x -= get_width()/4;

  for ( unsigned int i = 0; i != 3; ++i )
    {
      explosion* item = new explosion(15,20,0.6);
      item->set_z_position(get_z_position() + 1000);
      item->set_combo_value(get_combo_value());
      item->set_center_of_mass(pos);
      new_item( *item );
      CLAW_ASSERT( item->is_valid(),
                   "The explosion of bomb isn't correctly initialized" );
      
      bear::universe::forced_tracking m;
      m.set_reference_point_on_center(*this);
      item->set_forced_movement(m);
      pos.x += get_width()/4;
    }

  start_model_action("explose");
} // zeppelin::explose()
Пример #5
0
/**
 * \brief Initialise the item.
 */
void ptb::gorilla::on_enters_layer()
{
  super::on_enters_layer();

  set_model_actor( get_level_globals().get_model("model/forest/gorilla.cm") );
  start_model_action("idle");
  m_progress = &gorilla::progress_idle;
} // gorilla::on_enters_layer()
Пример #6
0
/**
 * \brief Start dead state.
 */
void ptb::gorilla::start_dead()
{
  if ( get_current_action_name() != "dead" )
    {
      start_model_action("dead");
      m_progress = &gorilla::progress_dead;
    }
} // gorilla::start_dead()
Пример #7
0
/**
 * \brief Do post creation actions.
 */
void rp::tnt::on_enters_layer()
{
  super::on_enters_layer();

  m_explosed = false;
  set_mass(100);
  set_model_actor( get_level_globals().get_model("model/tnt.cm") );
  start_model_action("idle");
} // rp::tnt::on_enters_layer()
Пример #8
0
/**
 * \brief Initialise the item.
 */
void ptb::friend_ghost::on_enters_layer()
{
  super::on_enters_layer();

  set_model_actor
    ( get_level_globals().get_model("model/castle/friend_ghost.cm") );
  start_model_action("wait");
  set_origin();
} // friend_ghost::on_enters_layer()
Пример #9
0
/**
 * \brief Progress in the state attack.
 */
void ptb::gorilla::progress_attack( bear::universe::time_type elapsed_time )
{
  if ( m_want_come_back )
    start_model_action("come_back");
  else if ( !scan(get_rendering_attributes().is_mirrored(), m_scan_distance) )
    m_want_come_back = true;
  else if ( get_rendering_attributes().is_mirrored() )
    add_internal_force( bear::universe::force_type(-250000, 0) );
  else
    add_internal_force( bear::universe::force_type(250000, 0) );
} // gorilla::progress_attack()
Пример #10
0
/**
 * \brief Initialize the item.
 */
void rp::switching::on_enters_layer()
{
  super::on_enters_layer();

  set_model_actor( get_level_globals().get_model("model/switching.cm") );
  start_model_action(m_initial_state);
   
  bear::engine::model_mark_placement mark;

  if ( get_mark_placement("sign", mark) )
    create_interactive_item
        (*this, 0.25, 0, mark.get_position() - get_center_of_mass() );
} // rp::switching::on_enters_layer()
Пример #11
0
/**
 * \brief Process a collision with the paint.
 * \param mark The mark on which the collision occurred.
 * \param that The other item of the collision.
 * \param info Some informations about the collision.
 * \param action The next action.
 */
void rp::switching::on_switch
( bear::engine::base_item& mark, bear::engine::base_item& that,
  bear::universe::collision_info& info, const std::string & action )
{
  plunger* p = dynamic_cast<plunger*>(&that);
  
  if ( p != NULL )
    if ( ! p->come_back() ) 
      {
        p->stop(true);
        start_model_action(action);
      }
} // switching::on_switch()
Пример #12
0
/**
 * \brief Function called when the tnt exploses.
 * \param give_score Indicates if we give score.
 */
void rp::tnt::explose(bool give_score)
{ 
  if ( ! m_explosed  )
    {
      set_transportability(false);
      kill_interactive_item();

      if ( give_score ) 
        util::create_floating_score(*this,500);
      
      set_can_move_items(false);
      m_explosed = true;
      start_model_action("explose");
      set_mass(std::numeric_limits<double>::infinity());
      
      create_explosion(3,0); 
    }
} // tnt::explose()
Пример #13
0
/**
 * \brief Do post creation actions.
 */
void rp::zeppelin::on_enters_layer()
{
  super::on_enters_layer();

  if ( get_rendering_attributes().is_mirrored() )
    {
      get_rendering_attributes().mirror(false);
      set_model_actor
        ( get_level_globals().get_model("model/zeppelin/zeppelin-mirror.cm") );
    }
  else
     set_model_actor
      ( get_level_globals().get_model("model/zeppelin/zeppelin.cm") );

  start_model_action("idle");

  if ( m_item != NULL )
    create_item();

  create_interactive_item(*this, 1.5);
} // rp::zeppelin::on_enters_layer()
Пример #14
0
/**
 * \brief Choose an angry action.
 */
void ptb::gorilla::choose_angry_action()
{
  std::ostringstream s;
  s << "angry_" << (rand() % 3 + 1);
  start_model_action(s.str());
} // gorilla::choose_angry_action()