public IEnumerator InitIterativ(GraphicRequest req, int n, int points) { var data = GraphicsDatabase.GetColorData(req.path + directions[n], bodyColor, true); yield return(null); while (points > 0) { var stain = ZombieStains.GetRandom(points, req.path.Contains("Naked")); var it = data.ApplyStainsIterativ(stain.Key, Rand.Bool, Rand.Bool); while (it.MoveNext()) { yield return(null); } points -= stain.Value; hash = Gen.HashCombine(hash, stain); yield return(null); } var request = new MaterialRequest { mainTex = null, // will be calculated lazy from 'data' shader = req.shader, color = color, colorTwo = colorTwo, maskTex = null }; mats[n] = new VariableMaterial(request, data); }
public override void Init(GraphicRequest req) { data = req.graphicData; path = req.path; color = req.color; colorTwo = req.colorTwo; drawSize = req.drawSize; hash = Gen.HashCombine(hash, path); hash = Gen.HashCombineStruct(hash, color); hash = Gen.HashCombineStruct(hash, colorTwo); var bodyColor = GraphicToolbox.RandomSkinColorString(); mats = new ColorData[] { GraphicsDatabase.GetColorData(req.path + "_back", bodyColor, true), GraphicsDatabase.GetColorData(req.path + "_side", bodyColor, true), GraphicsDatabase.GetColorData(req.path + "_front", bodyColor, true) } .Select(data => { var points = ZombieStains.maxStainPoints; while (points > 0) { var stain = ZombieStains.GetRandom(points, req.path.Contains("Naked")); data.ApplyStains(stain.Key, Rand.Bool, Rand.Bool); points -= stain.Value; hash = Gen.HashCombine(hash, stain); } var request = new MaterialRequest { mainTex = null, // will be calculated lazy from 'data' shader = req.shader, color = color, colorTwo = colorTwo, maskTex = null }; return(new PreparedMaterial(request, data)); }) .ToArray(); }