public bool IsCloseEnough(Unit unit, float radius = 10f) { if (unit.IsInRadius(this, radius)) { return(true); } if (unit is Character) { return(((Character)unit).Role.IsStaff); } return(false); }
/// <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(); } }
public bool IsCloseEnough(Unit unit, float radius) { return (unit.IsInRadius(this, radius)) || (unit is Character && ((Character)unit).Role.IsStaff); }
public bool IsCloseEnough(Unit unit, float radius = 10) { return((unit.IsInRadius(this, radius)) || (unit is Character && ((Character)unit).Role.IsStaff)); }