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(); }
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(); }