示例#1
0
        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);
        }
示例#2
0
        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. '\&lt;')
            str = str.EncodeEscapedHtmlTags();

            return(str);
        }
示例#3
0
 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());
 }
示例#4
0
        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> >();
        }
示例#5
0
 public override string GetValue(TaskRandom rnd) => Render.RenderText(Texts[rnd.NextInt(Texts.Length)], rnd.GetSubRandom(), Render.Setting.Level);
示例#6
0
 public override string GetValue(TaskRandom rnd) => rnd.NextRange(Minimum, Maximum).ToString();
示例#7
0
 public override string GetValue(TaskRandom rnd) => Values[rnd.NextInt(Values.Length)];
示例#8
0
 public abstract string GetValue(TaskRandom rnd);
示例#9
0
        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);
        }