public List <bool> Rules() { var list = new List <bool>(); //var log = new List<string>(); rng = Module.RuleSeed.GetRNG(); var one = rng.Seed == 1; ColBacking = UnityEngine.Random.Range(0, 8); ColButton = UnityEngine.Random.Range(0, 9); if (!Generator.pass) { Generator.Rules(this); } if (!one) { Counter = UnityEngine.Random.Range(0, 2); Module.DebugLog(0, "Chosen rules:"); } Module.coordX = coordX; Module.coordY = coordY; Module.BGManualTable = ManualTable; Possibilities = Generator.Swaps(Generator.Possibilities(this)); //Rules that check if the submit button contains a digit var Submit = Module.Submit.GetComponentInChildren <UnityEngine.TextMesh>(); if ((Generator.RuleIndicies.Contains(2) || Generator.RuleIndicies.Contains(3)) && Counter == 1) { Submit.text = Submit.text + " 0"; } foreach (int index in Generator.RuleIndicies) { list.Add(Possibilities[index].Func()); //log.Add(Possibilities[index].Descrip); if (!one) { Module.DebugLog(0, Possibilities[index].Descrip); } } //Module.DebugLog(string.Join("\n", log.Select(x => Generator.RuleIndicies[log.IndexOf(x)] + ": " + x + " - " + list[log.IndexOf(x)]).ToArray())); return(list.Concat(new[] { true }).ToList()); }
internal void Rules() { RandomFaultRule = Random.Range(0, 9); fault = Random.Range(0, 2); //The faulty button cannot be the same color as the correct button //FaultRule 2 also states that the correct button has to be the one that matches the backing's color while (colFault.Equals(ColButton) || colFault.Equals(ColBacking)) { colFault = Random.Range(0, 9); } //This determines which button is the faulty button, based on the rules. //While "fault" is always randomized, it doesn't necessarily mean the faulty button itself is always randomized. //This is why some values are fault, while others are actual integers, or the opposite of fault. var values = new[] { fault, fault, 0, 1, fault, (fault + 1) % 2, 0, 1, fault, 1, 0 }; //FaultRule 1 is excluded due to the OnInteract rule //FaultRule 2 is included as it overrides FaultRule 1 if (RandomFaultRule != 0 || (ColButton == ColBacking)) { //FaultRule 2 is determined by rather or not the button is the same color as the backing //This means it cannot be randomized based on the rule itself, at least not easily. if (ColButton == ColBacking) { RandomFaultRule = 1; } //Since FaultRule 2 is in the middle of the random function, increase the RandomFaultRule by 1 to match the manual //FaultRule 1 does not need to be increased else { RandomFaultRule++; } Module.ButtonA.OnInteract += delegate { Module.HandlePressButton(Module.ButtonA); return(false); }; Module.ButtonB.OnInteract += delegate { Module.HandlePressButton(Module.ButtonB); return(false); }; } else { //FaultRule 1 should be the only rule that reaches this else statement if (fault == 0) { Module.ButtonB.OnInteract += delegate() { Module.HandlePressButton(Module.ButtonB); return(false); } } ; else { Module.ButtonA.OnInteract += delegate() { Module.HandlePressButton(Module.ButtonA); return(false); } }; } //Check each rule until something returns true //This is mostly used for FaultRule 9, 10 and 11, since they're not randomized while (!CheckRules()) { RandomFaultRule++; } //Determine which button is faulty. 0 is left, 1 is right fault = values[RandomFaultRule]; //Grab the correct button and text so that Backgrounds.cs can apply their correct colors Module.correctMesh = FaultyMesh[(fault + 1) % 2]; Module.correctTextMesh = FaultyTextMesh[(fault + 1) % 2]; Module.DebugLog("Fake Button is on the {0}", fault.Equals(0) ? "left" : "right"); FaultyMesh[fault].material.color = Backgrounds.color[colFault]; Module.DebugLog("Fake Button was determined by rule {0}", RandomFaultRule + 1); Module.DebugLog("Backing is {0}, Button is {1}, Fake Button is {2}", Backgrounds.colorList[ColBacking], Backgrounds.colorList[ColButton], Backgrounds.colorList[colFault]); ReadableText(colFault, FaultyTextMesh[fault]); }