object GetRndValue(TaskRnd rnd, Dictionary <string, object> localVariables, TaskRandom random) { object rndVal; // Needs to know Render if (rnd is IWantKnowRender) { ((IWantKnowRender)rnd).Render = this; } // Get value var except = TranslateStringValues(rnd.Except, localVariables); int iRepeats = 0; do { rndVal = rnd.GetValue(random); } while (except != null && except.Contains(rndVal.ToString()) && iRepeats++ < 10000); // Save local variable if (rnd.IsLocalVariableSource) { localVariables[rnd.Id] = rndVal; // Save for the future } // Save global variable if (rnd.IsGlobal) { globalVariables[rnd.Id] = rndVal; } return(rndVal); }
internal string RenderText(TaskText text, TaskRandom random, string[] settingLevel) { if (text == null) { return(""); } string str = text.Text; var localVariables = new Dictionary <string, object>(); // Random elements if (text.Randoms != null) { foreach (var rnd in text.Randoms) { str = str.Replace($"%{rnd.Id}%", LevelCheck(rnd.Level, settingLevel) ? GetRndValue(rnd, localVariables, random)?.ToString() : ""); } } // Switches if (text.Switches != null) { foreach (var sw in text.Switches) { str = str.Replace($"%{sw.Id}%", LevelCheck(sw.Level, settingLevel) ? GetSwitchValue(sw, localVariables, random)?.ToString() : ""); } } // Variables if (text.Variables != null) { foreach (var vr in text.Variables) { str = str.Replace($"%{vr}%", GetVariable(vr, localVariables)?.ToString()); } } // Check level for subelements if (str.Contains('<') && str.Contains(" level=\"")) { var eText = XElement.Parse($"<text>{str}</text>"); var subElements = eText.Descendants().ToList(); foreach (XElement el in subElements) { if (el.Attribute("level") != null) { if (!LevelCheck(TaskLoader.ReadLevel(el), settingLevel)) { el.Remove(); } } } str = eText.InnerText(); } // Hidden HTML tags (starts with '\', e.g. '\<') str = str.EncodeEscapedHtmlTags(); return(str); }
public override string GetValue(TaskRandom rnd) { if (String.IsNullOrEmpty(Values)) { return(((char)(byte)rnd.NextRange((byte)Minimum, (byte)Maximum)).ToString()); } return(Values[rnd.NextInt(Values.Length)].ToString()); }
string[] selectedIds; // For Log private TaskRender(Tasks tasks, TaskSetting setting) { this.tasks = tasks; this.Setting = TaskLoader.MergeSettings(tasks.Setting, setting); random = new TaskRandom(setting.Seed); output = new StringBuilder(); globalVariables = new Dictionary <string, object>(); countOfTaskPreviousleyChoosed = new Dictionary <int, int>(); previousChoosedCombinations = new List <List <TaskItem> >(); }
public override string GetValue(TaskRandom rnd) => Render.RenderText(Texts[rnd.NextInt(Texts.Length)], rnd.GetSubRandom(), Render.Setting.Level);
public override string GetValue(TaskRandom rnd) => rnd.NextRange(Minimum, Maximum).ToString();
public override string GetValue(TaskRandom rnd) => Values[rnd.NextInt(Values.Length)];
public abstract string GetValue(TaskRandom rnd);
string GetSwitchValue(TaskSwitch sw, Dictionary <string, object> localVariables, TaskRandom random) { string val = TranslateStringValue(sw.Value, localVariables); var cases = TranslateStringValues(sw.Cases, localVariables); int index = cases.ToList().IndexOf(val); string result; if (sw.IsTexts) { if (index >= 0 && index < sw.ValuesTexts.Length) { result = RenderText(sw.ValuesTexts[index], random.GetSubRandom(), Setting.Level); } else { result = RenderText(sw.DefaultText, random.GetSubRandom(), Setting.Level); } } else if (index >= 0 && index < sw.Values.Length) { result = TranslateStringValue(sw.Values[index], localVariables); } else { result = TranslateStringValue(sw.Default, localVariables); } // Save local variable if (sw.IsLocalVariableSource) { localVariables[sw.Id] = result; } // Save global variable if (sw.IsGlobal) { globalVariables[sw.Id] = result; } return(result); }