static private string UpdateVariable(ref int NextIndex, ref int line_ptr, string Command, Variable variable, bool IsFunc = false) { MemorySlot variable_data = new MemorySlot(); if (GetNextSymbol(Command, ref NextIndex, ref line_ptr) == '=') { string expression; var result = GetNextExpression(Command, ref NextIndex, ref line_ptr, out expression, IsFunc); if (!result) { return("BAD_EXPRESSION"); } var res = InterpretExpression(expression, out variable_data); if (res != null) { return(res); } variable.Data = variable_data; return(null); } else { return("BAD_EXPRESSION"); } }
static private string InitTable(ref int NextIndex, ref int line_ptr, string Command, int TableIndex) { var symbol = GetNextSymbol(Command, ref NextIndex, ref line_ptr); if (symbol == '{') { if (CheckNextSymbol(Command, NextIndex, '}')) { GetNextSymbol(Command, ref NextIndex, ref line_ptr); return(null); } do { var VarName = GetNextLiteral(Command, ref NextIndex, ref line_ptr); if (!CheckTableLiteralName(VarName)) { return("BAD_LITERALNAME"); } if (GetNextSymbol(Command, ref NextIndex, ref line_ptr) == '=') { MemorySlot variable_data; if (CheckNextSymbol(Command, NextIndex, '{')) { variable_data = new MemorySlot("Table"); var res = InitTable(ref NextIndex, ref line_ptr, Command, Convert.ToInt32(variable_data.Data)); if (res != null) { return(res); } } else { string expression; var result = GetNextExpression(Command, ref NextIndex, ref line_ptr, out expression, true, true); if (!result) { return("BAD_EXPRESSION"); } var res = InterpretExpression(expression, out variable_data); if (res != null) { return(res); } } Tables[TableIndex].AddUpdateValue(VarName, variable_data); } else { return("BAD_EXPRESSION"); } }while (!CheckNextSymbol(Command, NextIndex, '}')); GetNextSymbol(Command, ref NextIndex, ref line_ptr); return(null); } else { return("BAD_EXPRESSION"); } }
public void OnEnable() { memorySlot = AssetDatabase.LoadAssetAtPath<MemorySlot>(singletonPath); if (memorySlot == null) { memorySlot = ScriptableObject.CreateInstance<MemorySlot>(); AssetDatabase.CreateAsset(memorySlot, singletonPath); EditorUtility.SetDirty(memorySlot); AssetDatabase.SaveAssets(); } }
/// <summary> /// Checks SearchingForMemoryMode /// </summary> private void CheckSearchForMemory() { if (m_Target != null) { SetQuickBehavoir(BehaviorEnum.Seek); float _distance = Vector3.Distance(transform.position, m_Target.transform.position); if (_distance < EnitiyManager.instance.DataCubeSettings.SearchForMemoryDistance * 0.5f) { MemorySlot _memorySlot = m_Target.GetComponent <MemorySlot>(); if (_memorySlot != null) { if (_memorySlot.CanFarm) { float _futureMb = m_CurrentMB + _memorySlot.FarmMB(3); if (_futureMb >= EnitiyManager.instance.DataCubeSettings.m_MaxMb) { m_CurrentMB = EnitiyManager.instance.DataCubeSettings.m_MaxMb; DataCubeStatus = DataCubeMode.Idle; } else { m_CurrentMB = _futureMb; } m_DataCubeUI.UpdateUi(); } else { DataCubeStatus = DataCubeMode.Idle; } } else { DataCubeStatus = DataCubeMode.Idle; m_Target = null; } } } else { Collider2D[] collider2Ds = Physics2D.OverlapCircleAll(transform.position, EnitiyManager.instance.DataCubeSettings.SearchForMemoryDistance, EnitiyManager.instance.DataCubeSettings.MemoryLayerMask); if (collider2Ds.Length > 0) { if (collider2Ds[0].isActiveAndEnabled) { m_Target = collider2Ds[0].gameObject; } } } }
static private string GetValueFromTable(string Variable, string VarPath, out MemorySlot Value) { foreach (var block in OpenedBlocks) { var vrb = block.variables.Find((variable) => variable.Name == Variable); if (vrb != null) { var DestinationTable = vrb.Data.Data; string NormalPath; var res = GetNormalizedPath(VarPath, out NormalPath); if (res != null) { Value = new MemorySlot(); return(res); } var PathList = NormalPath.Split(Separator, StringSplitOptions.RemoveEmptyEntries); for (var i = 0; i < PathList.Length - 1; i++) { MemorySlot tmp_slot; try { tmp_slot = Tables[Convert.ToInt32(DestinationTable)].GetValue(PathList[i]); } catch { Value = new MemorySlot(); return("BAD_TYPE"); } if (tmp_slot.DataType != "Table") { Value = new MemorySlot(); return("BAD_TYPE"); } DestinationTable = tmp_slot.Data; } Value = Tables[Convert.ToInt32(DestinationTable)].GetValue(PathList[PathList.Length - 1]); return(null); } } Value = new MemorySlot(); return("BADNAME_VARIABLE"); }
public void AddUpdateValue(string Key, MemorySlot Value) { MemorySlot tmp_value; if (Values.TryGetValue(Key, out tmp_value)) { if (Value.Data == null) { Values.Remove(Key); } else { Values[Key] = Value; } } else if (Value.Data != null) { Values.Add(Key, Value); } }
private IEnumerator SpawnMemorySlot() { while (true) { yield return(new WaitUntil(() => m_MaxMemorySlots > m_CurrentMemorySlotsAlive)); yield return(new WaitForSeconds(10)); int ammount = Random.Range(2, Mathf.RoundToInt(m_DataCubesToSpawn * 0.2f)); for (int i = 0; i < ammount; i++) { if (m_CurrentMemorySlotsAlive < m_MaxMemorySlots) { PoolableObject poolableObject = m_MemorySlotPool.GetObject(); poolableObject.SpawnObject(GetRandomPos()); MemorySlot memorySlot = poolableObject.GetComponent <MemorySlot>(); memorySlot.SetMB(Random.Range(5, 10)); m_CurrentMemorySlotsAlive++; } } } }
static private string UpdateVariableInTable(ref int NextIndex, ref int line_ptr, string Command, Variable variable, string VarPath, bool IsFunc = false) { var DestinationTable = variable.Data.Data; string NormalPath; var res = GetNormalizedPath(VarPath, out NormalPath); if (res != null) { return(res); } var PathList = NormalPath.Split(Separator, StringSplitOptions.RemoveEmptyEntries); for (var i = 0; i < PathList.Length - 1; i++) { MemorySlot tmp_slot; try { tmp_slot = Tables[Convert.ToInt32(DestinationTable)].GetValue(PathList[i]); } catch { return("BAD_TYPE"); } if (tmp_slot.DataType != "Table") { return("BAD_TYPE"); } DestinationTable = tmp_slot.Data; } MemorySlot variable_data = new MemorySlot(); if (GetNextSymbol(Command, ref NextIndex, ref line_ptr) == '=') { if (CheckNextSymbol(Command, NextIndex, '{')) { variable_data = new MemorySlot("Table"); res = InitTable(ref NextIndex, ref line_ptr, Command, Convert.ToInt32(variable_data.Data)); if (res != null) { return(res); } } else { string expression; var result = GetNextExpression(Command, ref NextIndex, ref line_ptr, out expression, IsFunc); if (!result) { return("BAD_EXPRESSION"); } res = InterpretExpression(expression, out variable_data); if (res != null) { return(res); } } Tables[Convert.ToInt32(DestinationTable)].AddUpdateValue(PathList[PathList.Length - 1], variable_data); return(null); } else { return("BAD_EXPRESSION"); } }
static private string InterpretExpression(string expression, out MemorySlot result) { List <ExpressionMember> postfix_form; var postfix_result = GetPostfixForm(expression, out postfix_form); if (postfix_result != null) { result = new MemorySlot("Unknown", null); return(postfix_result); } var OperandStack = new Stack <MemorySlot>(); try { MemorySlot Operand1_; MemorySlot Operand2_; dynamic Operand1; dynamic Operand2; for (var postfix_item = 0; postfix_item < postfix_form.Count; postfix_item++) { if (postfix_form[postfix_item].data == null) { if (//postfix_form[postfix_item].operation == OperatorType.Decrement || postfix_form[postfix_item].operation == OperatorType.Increment || postfix_form[postfix_item].operation == OperatorType.Not || postfix_form[postfix_item].operation == OperatorType.UnaryMinus || postfix_form[postfix_item].operation == OperatorType.UnaryPlus) { Operand1_ = OperandStack.Pop(); if (Operand1_.GetRealTypeVariable(out Operand1)) { switch (postfix_form[postfix_item].operation) { //case OperatorType.Decrement: // Operand1--; // OperandStack.Push(new MemorySlot(Operand1_.DataType, Operand1.ToString())); // break; //case OperatorType.Increment: // Operand1++; // OperandStack.Push(new MemorySlot(Operand1_.DataType, Operand1.ToString())); // break; case OperatorType.UnaryMinus: Operand1 = -Operand1; OperandStack.Push(new MemorySlot(Operand1_.DataType, Operand1.ToString())); break; case OperatorType.UnaryPlus: Operand1 = +Operand1; OperandStack.Push(new MemorySlot(Operand1_.DataType, Operand1.ToString())); break; case OperatorType.Not: Operand1 = !Operand1; OperandStack.Push(new MemorySlot(Operand1_.DataType, Operand1.ToString())); break; } } else { result = new MemorySlot("Unknown", null); return("BAD_CAST"); } } else { Operand2_ = OperandStack.Pop(); Operand1_ = OperandStack.Pop(); if (Operand1_.GetRealTypeVariable(out Operand1) | Operand2_.GetRealTypeVariable(out Operand2)) { switch (postfix_form[postfix_item].operation) { case OperatorType.Add: Operand1 = Operand1 + Operand2; string var_type; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.And: Operand1 = Operand1 & Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.Divide: Operand1 = Operand1 / Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.Equal: Operand1 = Operand1 == Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.LeftShift: Operand1 = Operand1 << Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.Less: Operand1 = Operand1 < Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.LessOrEqual: Operand1 = Operand1 <= Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.ModuleDivide: Operand1 = Operand1 % Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.More: Operand1 = Operand1 > Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.MoreOrEqual: Operand1 = Operand1 >= Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.Multiply: Operand1 = Operand1 * Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.NotEqual: Operand1 = Operand1 != Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.Or: Operand1 = Operand1 | Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.RightShift: Operand1 = Operand1 >> Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.Substract: Operand1 = Operand1 - Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; case OperatorType.Xor: Operand1 = Operand1 ^ Operand2; if (!GetVariableTypeFromCSharp(Operand1, out var_type)) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } OperandStack.Push(new MemorySlot(var_type, Operand1.ToString())); break; default: result = new MemorySlot("Unknown", null); return("BAD_OPERATOR"); } } else { result = new MemorySlot("Unknown", null); return("BAD_CAST"); } } } else { if (postfix_form[postfix_item].data == null) { result = new MemorySlot("Unknown", null); return("BAD_VARIABLE"); } OperandStack.Push(postfix_form[postfix_item].data.Value); } } } catch (InvalidCastException) { result = new MemorySlot("Unknown", null); return("BAD_TYPE"); } catch { result = new MemorySlot("Unknown", null); return("BAD_EXPRESSION"); } if (OperandStack.Count != 1) { result = new MemorySlot("Unknown", null); return("BAD_EXPRESSION"); } result = OperandStack.Pop(); return(null); }
public MemoryViewModel(RadioModel model, RadioViewModel view) { _mainView = view; _model = model; SelectFirst(); CommandSave = new DelegateCommand(() => { SelectedMemory = new MemorySlot(); SelectedName = string.Format("{0} {1}", _model.Radio.Demodulator().Mode(), (_model.Radio.Frequency() / 1000).ToString("#.00")); SelectedFrequency = _model.Radio.Frequency(); SelectedIfBandwidth = _model.Radio.Demodulator().IfBandwidth(); SelectedIfShift = _model.Radio.Demodulator().IfShift(); SelectedSquelch = _mainView.SquelchValue; SelectedMode = _model.Radio.Demodulator().Mode(); _model.Memory.Add(SelectedMemory); _model.Memory.Save(); }); CommandLoad = new DelegateCommand(() => { if (_selected.Frequency == default(uint)) { return; } _mainView.ModeState = _selected.Mode; _mainView.FrequencyValue = _selected.Frequency; _mainView.IfBandwidthValue = _selected.IfBandwidth; _mainView.IfShiftValue = _selected.IfShift; _mainView.SquelchValue = _selected.Squelch; }); CommandNext = new DelegateCommand(() => { if (_model.Memory.Count == 0) { return; } var index = _model.Memory.IndexOf(SelectedMemory); if (index == -1) { return; } index++; index = index >= _model.Memory.Count - 1 ? _model.Memory.Count - 1 : index; SelectedMemory = _model.Memory[index]; //CommandLoad.Execute(null); }); CommandPrevious = new DelegateCommand(() => { if (_model.Memory.Count == 0) { return; } var index = _model.Memory.IndexOf(SelectedMemory); if (index == -1) { return; } index--; index = index <= 0 ? 0 : index; SelectedMemory = _model.Memory[index]; //CommandLoad.Execute(null); }); CommandLast = new DelegateCommand(() => { if (_model.Memory.Count == 0) { return; } SelectedMemory = _model.Memory[_model.Memory.Count - 1]; //CommandLoad.Execute(null); }); CommandFirst = new DelegateCommand(() => { if (_model.Memory.Count == 0) { return; } SelectedMemory = _model.Memory[0]; //CommandLoad.Execute(null); }); CommandDelete = new DelegateCommand(() => { _model.Memory.Remove(SelectedMemory); _model.Memory.Save(); SelectFirst(); }); CommandDeleteAll = new DelegateCommand(() => { _model.Memory.Clear(); _model.Memory.Save(); SelectFirst(); }); }
static private string DefineVariable(ref int NextIndex, ref int line_ptr, string Command, string DataType, Block VarBlock, bool IsInFunction = false) { var VarName = GetNextLiteral(Command, ref NextIndex, ref line_ptr); if (!CheckLiteralName(VarName)) { return("BAD_LITERALNAME"); } foreach (var block in OpenedBlocks) { if (block.variables.Find((variable) => variable.Name == VarName) != null) { return("EXISTS_LITERALNAME"); } } bool IsInitialized = false; MemorySlot variable_data = new MemorySlot(); if (GetNextSymbol(Command, ref NextIndex, ref line_ptr) == '=') { if (CheckNextSymbol(Command, NextIndex, '{')) { variable_data = new MemorySlot("Table"); var res = InitTable(ref NextIndex, ref line_ptr, Command, Convert.ToInt32(variable_data.Data)); if (res != null) { return(res); } IsInitialized = true; } else { string expression; var result = GetNextExpression(Command, ref NextIndex, ref line_ptr, out expression, IsInFunction); if (!result) { return("BAD_EXPRESSION"); } var res = InterpretExpression(expression, out variable_data); if (res != null) { return(res); } IsInitialized = true; } } string RealType; if (DataType == "змінна") { if (IsInitialized) { VarBlock.variables.Add(new Variable(VarName, variable_data)); } else { return("BADINIT_VAR"); } } else if (GetVariableTypeFromCEurope(DataType, out RealType)) { if (IsInitialized) { if (variable_data.DataType == RealType) { VarBlock.variables.Add(new Variable(VarName, variable_data)); } else { return("BAD_TYPE"); } } else { VarBlock.variables.Add(new Variable(VarName, new MemorySlot(RealType))); } } else { return("BAD_TYPE"); } return(null); }
public Variable(string Name, MemorySlot Data) { this.Name = Name; this.Data = Data; }