/// <summary> /// Send character down the next leg of a multi-hop trip. /// </summary> internal static void ContinueFlight(Unit unit) { if (unit.LatestTaxiPathNode == null) { //throw new InvalidOperationException("Tried to continue Taxi-flight of Unit which did not start flying."); return; } var latestVertex = unit.LatestTaxiPathNode.Value; var current = latestVertex.Path.To; if (unit.m_TaxiMovementTimer.IsRunning && !unit.IsInRadius(current.Position, AirSpeed)) { return; } var done = false; // Are we at the end of the line? if (unit.TaxiPaths.Count < 2) { done = true; } else { var arrivalPath = unit.TaxiPaths.Dequeue(); if (arrivalPath.To != current) { unit.CancelTaxiFlight(); return; } var destPath = unit.TaxiPaths.Peek(); if (current != destPath.From) { unit.CancelTaxiFlight(); return; } } if (!done) { // One stop on a multi-stop ride FlyUnit(unit, false); } else { if (IsNormalSpeed) { unit.Map.MoveObject(unit, latestVertex.Pos); } else { // Client doesn't seem to display the movement fast enough // so we have to speed it up by teleporting unit.TeleportTo(latestVertex.Pos); } unit.CancelTaxiFlight(); } }