/// <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);
    }
    public static string GenerateSentence(MaskComponents mask, int numComponents)
    {
        int           currentPart = 0;
        StringBuilder dialogue    = new StringBuilder();
        var           intro       = introList[Random.Range(0, introList.Length)];
        StringBuilder question    = new StringBuilder();

        addLine(question, "des yeux ", mask.eyes, numComponents, ref currentPart);
        addLine(question, "une bouche ", mask.mouth, numComponents, ref currentPart);
        addLine(question, "une forme ", mask.face, numComponents, ref currentPart);
        dialogue.AppendFormat(intro, question);
        return(dialogue.ToString());
    }
Ejemplo n.º 3
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));
    }