protected override float CalculatePriority()
        {
            var blockMask       = new ShipMask(~ship.BlockContext);
            var closestDistance = float.MaxValue;

            foreach (var enemy in ship.QueryNeighbours(detectionRadius, blockMask, true))
            {
                var distance = (enemy.transform.position - ship.transform.position).magnitude;

                if (distance < closestDistance)
                {
                    closestDistance = distance;
                    enemyTarget     = enemy;
                }
            }

            if (closestDistance == float.MaxValue)
            {
                enemyTarget = null;
            }

            DebugString = $"Target: {enemyTarget?.GetInstanceString()}";

            return(enemyTarget == null
                ? 0f
                : 5f);
        }
        // TODO: Improve detection of large ships, as this only registers other ships whose centre overlaps the detection radius
        protected override float CalculatePriority()
        {
            var globalPos        = ship.transform.position;
            var shipMask         = new ShipMask(~BlockContext.None);
            var shortestDistance = float.MaxValue;

            neighbourCache?.Clear();
            neighbourCache = neighbourCache ?? new List <Ship>();

            foreach (var neighbour in ship.QueryNeighbours(settings.detectionRadius, shipMask))
            {
                if (!ShouldYield(neighbour))
                {
                    continue;
                }

                var neighbourPos = neighbour.transform.position;
                var dist         = (globalPos - neighbourPos).magnitude;

                if (shortestDistance > dist)
                {
                    shortestDistance = dist;
                }

                neighbourCache.Add(neighbour);
            }

            if (shortestDistance == float.MaxValue)
            {
                return(0f);
            }

            // Calculate the priority value due to distance to the shortest
            var distancePriority = (settings.detectionRadius - shortestDistance) / settings.detectionRadius *
                                   settings.priorityMultiplier;

            return(distancePriority + settings.priorityBase);
        }