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