예제 #1
0
파일: player.cpp 프로젝트: Cruel/scummvm
void Player::walk(const Common::Point &pos, Facing facing) {
	cancelWalk();
	_needToWalk = true;
	_readyToWalk = true;
	_prepareWalkPos = pos;
	_prepareWalkFacing = facing;
}
예제 #2
0
void Creature::updateWalk()
{
    if(m_walking) {
        int elapsedTicks = g_clock.ticksElapsed(m_walkStartTicks);
        int totalPixelsWalked = std::min((int)round(elapsedTicks / m_walkTimePerPixel), 32);

        if(m_inverseWalking) {
            if(m_direction == Otc::North || m_direction == Otc::NorthEast || m_direction == Otc::NorthWest)
                m_walkOffset.y = 32 - totalPixelsWalked;
            else if(m_direction == Otc::South || m_direction == Otc::SouthEast || m_direction == Otc::SouthWest)
                m_walkOffset.y = totalPixelsWalked - 32;

            if(m_direction == Otc::East || m_direction == Otc::NorthEast || m_direction == Otc::SouthEast)
                m_walkOffset.x = totalPixelsWalked - 32;
            else if(m_direction == Otc::West || m_direction == Otc::NorthWest || m_direction == Otc::SouthWest)
                m_walkOffset.x = 32 - totalPixelsWalked;

            if(m_walkOffset.x == 0 && m_walkOffset.y == 0)
                cancelWalk(m_direction);
        }
        else {
            if(m_direction == Otc::North || m_direction == Otc::NorthEast || m_direction == Otc::NorthWest)
                m_walkOffset.y = -totalPixelsWalked;
            else if(m_direction == Otc::South || m_direction == Otc::SouthEast || m_direction == Otc::SouthWest)
                m_walkOffset.y = totalPixelsWalked;

            if(m_direction == Otc::East || m_direction == Otc::NorthEast || m_direction == Otc::SouthEast)
                m_walkOffset.x = totalPixelsWalked;
            else if(m_direction == Otc::West || m_direction == Otc::NorthWest || m_direction == Otc::SouthWest)
                m_walkOffset.x = -totalPixelsWalked;
        }

        int totalWalkTileTicks = (int)m_walkTimePerPixel*32 * 0.5;
        if(m_type->dimensions[ThingType::AnimationPhases] > 0)
            m_animation = (g_clock.ticks() % totalWalkTileTicks) / (totalWalkTileTicks / (m_type->dimensions[ThingType::AnimationPhases] - 1)) + 1;
        else
            m_animation = 0;
        g_dispatcher.scheduleEvent(std::bind(&Creature::updateWalk, asCreature()), m_walkTimePerPixel);

        if(totalPixelsWalked == 32)
            cancelWalk(m_direction);
    }
}
void FootstepMarker::processMenuFeedback(uint8_t menu_entry_id) {
  switch (menu_entry_id) {
  case 1: {                     // look ground
    lookGround();
    break;
  }
  case 2: {                     // execute
    executeCB(std_msgs::Empty::ConstPtr());
    break;
  }
  case 3: {                     // replan
    planIfPossible();
    break;
  }
  case 4: {                     // cancel walk
    cancelWalk();
    break;
  }
  case 5: {                     // toggle 6dof marker
    show_6dof_control_ = !show_6dof_control_;
    break;
  }
  case 6: {                     // toggle 6dof marker
    changePlannerHeuristic(":straight-heuristic");
    break;
  }
  case 7: {                     // toggle 6dof marker
    changePlannerHeuristic(":stepcost-heuristic**");
    break;
  }
  case 8: {                     // toggle 6dof marker
    lleg_first_ = true;
    break;
  }
  case 9: {                     // toggle 6dof marker
    lleg_first_ = false;
    break;
  }
    
  default: {
    break;
  }
  }
}
예제 #4
0
파일: player.cpp 프로젝트: Cruel/scummvm
void Player::cancelCommand() {
	cancelWalk();
	_action->_inProgress = false;
}