/// <summary> /// 判断变量格式是否正确,并赋值给`variable`。 /// `isExist`: 指定变量在使用之前,是否存在。 /// </summary> /// <param name="varStr"></param> /// <param name="isExist"></param> /// <param name="variable"></param> /// <param name="error"></param> /// <returns></returns> protected bool IsMatchVar(string varStr, bool isExist, ref string variable, out string error) { if (!RegexUtility.IsMatchVariable(varStr)) { error = GetMatchVariableErrorString(varStr); return(false); } if (ScenarioBlackboard.Contains(varStr) != isExist) { error = GetVariableExistErrorString(varStr, !isExist); return(false); } variable = varStr; error = null; return(true); }
public override bool ParseArgs(IScenarioContent content, ref VarArgs args, out string error) { // var a; // var b = 10; // var c = b; if (content.length != 2 && content.length != 4) { error = GetLengthErrorString(2, 4); return(false); } // 变量名只能包含数字,字母(中文),下划线,且不能以数字开头 if (!RegexUtility.IsMatchVariable(content[1])) { error = GetMatchVariableErrorString(content[1]); return(false); } args.name = content[1]; //// 你也可以使用这个方法,这里确保了变量必须不存在 //if (!IsMatchVar(content[1], false, ref args.name, out error)) //{ // return false; //} args.value = 0; if (content.length == 4) { if (content[2] != "=") { error = GetMatchOperatorErrorString(content[2], "="); return(false); } if (!ParseOrGetVarValue(content[3], ref args.value, out error)) { return(false); } } error = null; return(true); }
/// <summary> /// 如果是数字,直接赋值;如果是变量,就获取变量 /// </summary> /// <param name="numOrVar"></param> /// <param name="value"></param> /// <param name="error"></param> /// <returns></returns> protected bool ParseOrGetVarValue(string numOrVar, ref int value, out string error) { if (!int.TryParse(numOrVar, out value)) { if (!RegexUtility.IsMatchVariable(numOrVar)) { error = GetMatchVariableErrorString(numOrVar); return(false); } if (!ScenarioBlackboard.TryGet(numOrVar, out value)) { error = GetVariableExistErrorString(numOrVar, false); return(false); } } error = null; return(true); }
public override bool ParseArgs(IScenarioContent content, ref MenuArgs args, out string error) { /// menu option /// option0 /// option1 /// ...; if (content.length < 3) { error = GetLengthErrorString(); return(false); } // 获取使用的变量 if (!RegexUtility.IsMatchVariable(content[1])) { error = GetMatchVariableErrorString(content[1]); return(false); } args.menuName = content[1]; TextInfoConfig config = TextInfoConfig.Get <TextInfoConfig>(); List <string> options = new List <string>(); int index = 2; while (index < content.length) { string line; if (content[index].StartsWith("\"")) { if (!ScenarioUtility.ParseContentString(content, ref index, out line, out error)) { return(false); } } else { // 可能是个变量 int id = -1; if (!ParseOrGetVarValue(content[index], ref id, out error)) { return(false); } TextInfo info = config[id]; if (info == null) { error = string.Format( "{0} ParseArgs error: text id `{1}` was not found.", typeName, content[index]); return(false); } line = info.text; index++; } options.Add(line); } args.options = options.ToArray(); error = null; return(true); }