public DockingObject GetDockingPoint(Old.Object.Ship.Ship ship) { var validDockingObjs = new List <DockingObject>(); ShipArchetype.MissionProperty mp = ((ShipArchetype)ship.Arch).mission_property; int minType = Int32.MaxValue; foreach (DockingObject obj in DockingObjs) { if (obj.CanDock(mp)) { if (obj.Type == DockingPoint.DockingSphere.RING) { if (obj.Index == 0) { return(obj); } } else if ((int)obj.Type <= minType) { if ((int)obj.Type < minType) { validDockingObjs.Clear(); minType = (int)obj.Type; } validDockingObjs.Add(obj); } } } if (validDockingObjs.Count == 0) { return(null); } int selectedPoint = _rand.Next(Math.Min(2, validDockingObjs.Count)); return(validDockingObjs.OrderBy(x => x.Position.DistSqr(ship.Position)).ElementAt(selectedPoint)); }
public bool CanDock(ShipArchetype.MissionProperty mp) { return((int)mp <= (int)Type); }