public static void AddLocalVariables(StackLevel locals) { lock (s_variables) { s_locals.Push(locals); s_lastExecutionLevel = locals; } }
protected override Variable Evaluate(ParsingScript script) { List <Variable> args = script.GetFunctionArgs(); script.MoveBackIf(Constants.START_GROUP); if (args.Count != m_args.Length) { throw new ArgumentException("Function [" + m_name + "] arguments mismatch: " + m_args.Length + " declared, " + args.Count + " supplied"); } // 1. Add passed arguments as local variables to the Parser. StackLevel stackLevel = new StackLevel(m_name); for (int i = 0; i < m_args.Length; i++) { stackLevel.Variables[m_args[i]] = new GetVarFunction(args[i]); } ParserFunction.AddLocalVariables(stackLevel); // 2. Execute the body of the function. Variable result = null; ParsingScript tempScript = new ParsingScript(m_body); tempScript.ScriptOffset = m_parentOffset; if (m_parentScript != null) { tempScript.Char2Line = m_parentScript.Char2Line; tempScript.Filename = m_parentScript.Filename; tempScript.OriginalScript = m_parentScript.OriginalScript; } while (tempScript.Pointer < m_body.Length - 1 && (result == null || !result.IsReturn)) { result = tempScript.ExecuteTo(); tempScript.GoToNextStatement(); } ParserFunction.PopLocalVariables(); //script.MoveForwardIf(Constants.END_ARG); //script.MoveForwardIf(Constants.END_STATEMENT); if (result == null) { result = Variable.EmptyInstance; } else { result.IsReturn = false; } return(result); }
private static StackLevel GetCurrentLevel() { StackLevel result = null; if (TriggersStack.Count > 0) { result = TriggersStack[TriggersStack.Count - 1]; } return(result); }
public void RegisterArguments(List <Variable> args) { StackLevel stackLevel = new StackLevel(m_name); for (int i = 0; i < m_args.Length; i++) { stackLevel.Variables[m_args [i]] = new GetVarFunction(args [i]); } ParserFunction.AddLocalVariables(stackLevel); }
public static void ResolveTriggers(TriggerTypes triggerType, Action callBack = null) { if (callBack != null) { Console.Write(triggerType.ToString(), LogTypes.Triggers, true, "yellow"); } else { Console.Write(triggerType + " is resolved again", LogTypes.Triggers, false, "yellow"); } if (triggerType == TriggerTypes.OnDamageIsDealt && callBack != null) { DamageNumbers.UpdateSavedHP(); } StackLevel currentLevel = GetCurrentLevel(); if (currentLevel == null || currentLevel.IsActive) { CreateNewLevelOfStack(triggerType, callBack); currentLevel = GetCurrentLevel(); } if (!currentLevel.IsActive) { SetStackLevelCallBack(callBack); List <Trigger> currentTriggersList = currentLevel.GetTriggersByPlayer(Phases.PlayerWithInitiative); Players.PlayerNo currentPlayer = (currentTriggersList.Count > 0) ? Phases.PlayerWithInitiative : Roster.AnotherPlayer(Phases.PlayerWithInitiative); currentTriggersList = currentLevel.GetTriggersByPlayer(currentPlayer); if (currentTriggersList.Count != 0) { currentLevel.IsActive = true; if ((currentTriggersList.Count == 1) || (IsAllSkippable(currentTriggersList))) { FireTrigger(currentTriggersList[0]); } else { RunDecisionSubPhase(); } } else { if (triggerType == TriggerTypes.OnDamageIsDealt) { DamageNumbers.ShowChangedHP(); } DoCallBack(); } } }
public static void ResolveTriggers(TriggerTypes triggerType, Action callBack = null) { if (DebugManager.DebugTriggers) { Debug.Log("Triggers are resolved: " + triggerType); } if (triggerType == TriggerTypes.OnDamageIsDealt && callBack != null) { DamageNumbers.UpdateSavedHP(); } StackLevel currentLevel = GetCurrentLevel(); if (currentLevel == null || currentLevel.IsActive) { CreateNewLevelOfStack(callBack); currentLevel = GetCurrentLevel(); } if (!currentLevel.IsActive) { SetStackLevelCallBack(callBack); List <Trigger> currentTriggersList = currentLevel.GetTriggersByPlayer(Phases.PlayerWithInitiative); Players.PlayerNo currentPlayer = (currentTriggersList.Count > 0) ? Phases.PlayerWithInitiative : Roster.AnotherPlayer(Phases.PlayerWithInitiative); currentTriggersList = currentLevel.GetTriggersByPlayer(currentPlayer); if (currentTriggersList.Count != 0) { currentLevel.IsActive = true; if ((currentTriggersList.Count == 1) || (IsAllSkippable(currentTriggersList))) { FireTrigger(currentTriggersList[0]); } else { RunDecisionSubPhase(); } } else { if (triggerType == TriggerTypes.OnDamageIsDealt) { DamageNumbers.ShowChangedHP(); } DoCallBack(); } } }
public static void FinishTrigger() { StackLevel currentStackLevel = GetCurrentLevel(); Trigger currentTrigger = currentStackLevel.GetCurrentTrigger(); if (DebugManager.DebugTriggers) { Debug.Log("Trigger is finished: " + currentTrigger.Name); } currentStackLevel.RemoveTrigger(currentTrigger); currentStackLevel.IsActive = false; ResolveTriggers(currentTrigger.TriggerType); }
// Add Local Variable public static void AddLocalVariable(ParserFunction local) { StackLevel locals = null; if (_locals.Count == 0) { locals = new StackLevel(); _locals.Push(locals); } else { locals = _locals.Peek(); } locals.Variables[local.Name] = local; }
static int get_stackLevel(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); UISystem obj = (UISystem)o; StackLevel ret = obj.stackLevel; ToLua.Push(L, ret); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o, "attempt to index stackLevel on a nil value")); } }
static int set_stackLevel(IntPtr L) { object o = null; try { o = ToLua.ToObject(L, 1); UISystem obj = (UISystem)o; StackLevel arg0 = (StackLevel)ToLua.CheckObject(L, 2, typeof(StackLevel)); obj.stackLevel = arg0; return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e, o, "attempt to index stackLevel on a nil value")); } }
public static void FinishTrigger() { StackLevel currentStackLevel = GetCurrentLevel(); if (currentStackLevel.GetTrigersList().Count == 0) { Debug.Log("Ooops, you want to finish trigger, but new empty level of stack was created!"); } Trigger currentTrigger = currentStackLevel.GetCurrentTrigger(); Console.Write(currentTrigger.Name + " is finished", LogTypes.Triggers); currentStackLevel.RemoveTrigger(currentTrigger); currentStackLevel.IsActive = false; ResolveTriggers(currentTrigger.TriggerType); }
public static void AddLocalVariable(ParserFunction local) { local.m_isGlobal = false; StackLevel locals = null; if (s_locals.Count == 0) { locals = new StackLevel(); s_locals.Push(locals); } else { locals = s_locals.Peek(); } locals.Variables[local.Name] = local; Translation.AddTempKeyword(local.Name); }
public static void FinishTrigger() { StackLevel currentStackLevel = GetCurrentLevel(); if (currentStackLevel == null || currentStackLevel.GetTrigersList() == null || currentStackLevel.GetTrigersList().Count == 0) { Debug.Log("Ooops! You want to finish trigger, but it is already finished"); } Trigger currentTrigger = currentStackLevel.GetCurrentTrigger(); Console.Write(currentTrigger.Name + " is finished", LogTypes.Triggers); currentStackLevel.RemoveTrigger(currentTrigger); currentStackLevel.IsActive = false; ResolveTriggers(currentTrigger.TriggerType); }
public static void AddNamespace(string namespaceName) { if (!string.IsNullOrWhiteSpace(s_namespace)) { throw new ArgumentException("Already inside of namespace [" + s_namespace + "]."); } StackLevel level; if (!s_namespaces.TryGetValue(namespaceName, out level)) { level = new StackLevel(namespaceName, true);; } s_locals.Push(level); s_namespaces[namespaceName] = level; s_namespace = namespaceName; s_namespacePrefix = namespaceName + "."; }
public static void AddLocalVariable(ParserFunction local) { NormalizeValue(local); local.m_isGlobal = false; StackLevel locals = null; if (s_locals.Count == 0) { locals = new StackLevel(); s_locals.Push(locals); } else { locals = s_locals.Peek(); } var name = Constants.ConvertName(local.Name); local.Name = Constants.GetRealName(name); locals.Variables[name] = local; #if UNITY_EDITOR == false && UNITY_STANDALONE == false && __ANDROID__ == false && __IOS__ == false Translation.AddTempKeyword(name); #endif }
protected override Variable Evaluate(string data, ref int from) { bool isList; List <Variable> functionArgs = Utils.GetArgs(data, ref from, Constants.START_ARG, Constants.END_ARG, out isList); Utils.MoveBackIf(data, ref from, Constants.START_GROUP); if (functionArgs.Count != _args.Length) { throw new ArgumentException("Функция [" + _name + "] аргументи несъответствие: " + _args.Length + " обявен, " + functionArgs.Count + " доставен"); } // 1. Добавете предаваните аргументи като локални променливи към анализатора. StackLevel stackLevel = new StackLevel(_name); for (int i = 0; i < _args.Length; i++) { stackLevel.Variables[_args[i]] = new GetVarFunction(functionArgs[i]); } ParserFunction.AddLocalVariables(stackLevel); // 2. Изпълнете тялото на функцията. int temp = 0; Variable result = null; while (temp < _body.Length - 1) { result = Parser.LoadAndCalculate(_body, ref temp, Constants.END_PARSE_ARRAY); Utils.GoToNextStatement(_body, ref temp); } ParserFunction.PopLocalVariables(); return(result); }
/// <summary> /// Initializes a new instance of the <see cref="StackedRequestParams"/> class. /// </summary> /// <param name="stackInfo">The stack witch contains the level to switch to.</param> /// <param name="stackLevel">The stack level to switch to.</param> public StackedRequestParams(StackInfo stackInfo, StackLevel stackLevel) { this.StackInfo = stackInfo; this.StackLevel = stackLevel; }
/// <summary> /// Initializes a new instance of the <see cref="SwitchToStackRequestParams"/> class. /// </summary> /// <param name="stackInfo">The stack witch contains the level to switch to.</param> /// <param name="stackLevel">The stack level to switch to.</param> public SwitchToStackRequestParams(StackInfo stackInfo, StackLevel stackLevel) { this.StackInfo = stackInfo; this.StackLevel = stackLevel; }
/// <summary> /// Initializes a new instance of the <see cref="GetLevelDetailsResponse"/> class. /// </summary> /// <param name="stackLevel">An instance of <see cref="StackLevel"/> sent in the response.</param> public GetLevelDetailsResponse(StackLevel stackLevel) { this.StackLevel = stackLevel; }
/// <summary> /// Initializes a new instance of the <see cref="GetLevelDetailsRequestParams"/> class. /// </summary> /// <param name="stackLevel">The stack level to switch to.</param> public GetLevelDetailsRequestParams(StackLevel stackLevel) { this.StackLevel = stackLevel; }
// Add Local Variables public static void AddLocalVariables(StackLevel locals) { _locals.Push(locals); }