/// <summary>
    /// Generate a random mask from a given pool.
    /// </summary>
    /// <param name="existingPool">the pool to take parts from</param>
    /// <param name="numForms">the number of components of the mask.false between 1 and 3</param>
    /// <returns>A mask with 1 to 3 components</returns>
    public static MaskComponents GenerateMask(MaskCompletePool existingPool, int numForms)
    {
        Assert.IsTrue(numForms >= 1 && numForms <= 3);
        List <string> components = new List <string>();

        components.Add(getPart(existingPool.eyes));
        components.Add(getPart(existingPool.face));
        components.Add(getPart(existingPool.mouth));

        //remove random components
        List <int> indexes = new List <int>()
        {
            0, 1, 2
        };

        ListUtils.Shuffle(indexes);
        IEnumerable <int> filteredIndexes = indexes.Take(3 - numForms);

        foreach (var index in filteredIndexes)
        {
            components[index] = "";
        }

        MaskComponents mask = new MaskComponents(components[0], components[1], components[2]);

        return(mask);
    }
Exemplo n.º 2
0
    public string GeneratedSentence(int clientNumber)
    {
        MaskPartContainer container = DebugUtils.GetGameMaster().GetComponent <MaskPartContainer>();
        MaskCompletePool  pool      = new MaskCompletePool(
            MaskPartContainer.GetUnlockedMasks(container.EyesParts),
            MaskPartContainer.GetUnlockedMasks(container.ShapeParts),
            MaskPartContainer.GetUnlockedMasks(container.MouthParts));

        victoriousPick.Clear();

        int numComponents = DifficultyScale(clientNumber);


        MaskComponents mask = RandomDemandGenerator.GenerateMask(pool, numComponents);

        //add non-empty parts to the victory list
        foreach (var elem in mask.toList().Where(n => n != ""))
        {
            victoriousPick.Add(elem);
        }
        return(RandomDemandDialogGen.GenerateSentence(mask, numComponents));
    }