예제 #1
0
        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);
        }
예제 #2
0
        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();
        }