/// <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 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)); }