示例#1
0
Vector
PathWalker::advance(float elapsed_time)
{
  if (!running) return path->nodes[current_node_nr].position;

  assert(elapsed_time >= 0);

  elapsed_time *= fabsf(walking_speed);

  const Path::Node* current_node = & (path->nodes[current_node_nr]);
  while(node_time + elapsed_time * node_mult >= 1) {
    elapsed_time -= (1 - node_time) / node_mult;

    if(walking_speed > 0) {
      advance_node();
    } else if(walking_speed < 0) {
      goback_node();
    }

    current_node = & (path->nodes[current_node_nr]);
    node_time = 0;
    if(walking_speed > 0) {
      node_mult = 1 / current_node->time;
    } else {
      node_mult = 1 / path->nodes[next_node_nr].time;
    }
  }

  node_time += elapsed_time * node_mult;

  return get_pos();
}
示例#2
0
Vector
PathWalker::advance(float elapsed_time)
{
  if (!path->is_valid()) return Vector(0, 0);
  if (Editor::is_active()) {
    Vector pos__ = path->nodes.begin()->position;
//    log_warning << "x" << pos__.x << " y" << pos__.y << std::endl;
    return pos__;
  }

  if (!running) return path->nodes[current_node_nr].position;

  assert(elapsed_time >= 0);

  elapsed_time *= fabsf(walking_speed);

  const Path::Node* current_node = & (path->nodes[current_node_nr]);
  while(node_time + elapsed_time * node_mult >= 1) {
    elapsed_time -= (1 - node_time) / node_mult;

    if(walking_speed > 0) {
      advance_node();
    } else if(walking_speed < 0) {
      goback_node();
    }

    current_node = & (path->nodes[current_node_nr]);
    node_time = 0;
    if(walking_speed > 0) {
      node_mult = 1 / current_node->time;
    } else {
      node_mult = 1 / path->nodes[next_node_nr].time;
    }
  }

  node_time += elapsed_time * node_mult;

  return get_pos();
}