Exemplo n.º 1
0
    /// <summary>
    /// Returns a list of random Positions from an area.
    /// </summary>
    /// <param name="amount">The number of random positions.</param>
    /// <param name="rangeX">The X range of the area</param>
    /// <param name="rangeY">The Y range of the area</param>
    /// <param name="allowDuplicates">If the same position can be generated.</param>
    /// <returns></returns>
    public static List <Position> GenerateRandomPositions(int amount, int rangeX = 8, int rangeY = 8, bool allowDuplicates = false)
    {
        rangeX = UtilityFunctions.ClampMin(rangeX, 1);
        rangeY = UtilityFunctions.ClampMin(rangeY, 1);
        amount = UtilityFunctions.ClampMax(amount, rangeY * rangeX);

        List <Position> result             = new List <Position>();
        List <Position> availablePositions = new List <Position>();

        for (int i = 0; i < rangeY; i++)
        {
            for (int j = 0; j < rangeX; j++)
            {
                availablePositions.Add(new Position(j, i));
            }
        }
        for (int i = 0; i < amount; i++)
        {
            int randomIndex = Random.Range(0, availablePositions.Count);
            result.Add(availablePositions[randomIndex]);
            if (!allowDuplicates)
            {
                availablePositions.RemoveAt(randomIndex);
            }
        }

        return(result);
    }