public static void CreateFleetFromDataAt(FleetDesign data, Empire Owner, Vector2 Position, float facing)
 {
     Fleet fleet = new Fleet()
     {
         Position = Position,
         facing = facing,
         Owner = Owner,
         DataNodes = new BatchRemovalCollection<FleetDataNode>()
     };
     foreach (FleetDataNode node in data.Data)
     {
         fleet.DataNodes.Add(node);
     }
     fleet.AssignDataPositions(facing);
     fleet.Name = data.Name;
     fleet.FleetIconIndex = data.FleetIconIndex;
     fleet.DataNodes.thisLock.EnterWriteLock();
     foreach (FleetDataNode node in fleet.DataNodes)
     {
         Ship s = ResourceManager.CreateShipAtPoint(node.ShipName, Owner, Position + node.OrdersOffset, facing);
         s.RelativeFleetOffset = node.FleetOffset;
         node.SetShip(s);
         fleet.AddShip(s);
     }
     fleet.DataNodes.thisLock.ExitWriteLock();
     foreach (Ship s in Owner.GetFleetsDict()[1].Ships)
     {
         s.fleet = null;
     }
     Owner.GetFleetsDict()[1] = fleet;
 }