예제 #1
0
        public static void RandomizeTint(CFVector4 linearColor, bool randomizeAlpha)
        {
            //Randomizing hte pick order will ensure we get a random more-dominant first color (but only sometimes).
            //e.g. if e went in R G B order red would always have a chance at a higher value than the last picked item
            List <float> randomOrderChooser = new List <float>(3);

            randomOrderChooser.Add(linearColor.W);
            randomOrderChooser.Add(linearColor.X);
            randomOrderChooser.Add(linearColor.Y);

            float totalTintValue = randomOrderChooser.Sum();

            if (totalTintValue > 0)
            {
                randomOrderChooser.Shuffle();

                randomOrderChooser[0] = ThreadSafeRandom.NextFloat(0, totalTintValue);
                totalTintValue       -= randomOrderChooser[0];

                randomOrderChooser[1] = ThreadSafeRandom.NextFloat(0, totalTintValue);
                totalTintValue       -= randomOrderChooser[1];

                randomOrderChooser[2] = totalTintValue;

                linearColor.W = randomOrderChooser.PullFirstItem();
                linearColor.X = randomOrderChooser.PullFirstItem();
                linearColor.Y = randomOrderChooser.PullFirstItem();

                if (randomizeAlpha)
                {
                    linearColor.Z = ThreadSafeRandom.NextFloat(0, 1);
                }
            }
        }
예제 #2
0
        private static void TestR(ExportEntry export)
        {
            if (/*export.UIndex == 36224 && */ export.ClassName == "Material")
            {
                var obj = ObjectBinary.From <Material>(export);
                foreach (var v in obj.SM3MaterialResource.UniformPixelVectorExpressions)
                {
                    if (v is MaterialUniformExpressionVectorParameter vp)
                    {
                        vp.DefaultA = ThreadSafeRandom.NextFloat(0, 1);
                        vp.DefaultR = ThreadSafeRandom.NextFloat();
                        vp.DefaultG = ThreadSafeRandom.NextFloat();
                        vp.DefaultB = ThreadSafeRandom.NextFloat();
                    }
                    else if (v is MaterialUniformExpressionAppendVector av)
                    {
                    }
                }

                foreach (var v in obj.SM3MaterialResource.UniformPixelVectorExpressions)
                {
                }
                export.WriteBinary(obj);
            }

            if (export.UIndex == 37354 || export.UIndex == 37355)
            {
                var vParms = VectorParameter.GetVectorParameters(export);
                if (vParms != null)
                {
                    foreach (var vParm in vParms)
                    {
                        CFVector4 nv = new CFVector4();
                        nv.W = ThreadSafeRandom.NextFloat(2000);
                        nv.X = ThreadSafeRandom.NextFloat(2000);
                        nv.Y = ThreadSafeRandom.NextFloat(2000);
                        nv.Z = ThreadSafeRandom.NextFloat(2000);
                        vParm.ParameterValue = nv;
                    }
                }
            }
        }