Exemplo n.º 1
0
        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");
            }
        }
Exemplo n.º 2
0
        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();
     }
 }
Exemplo n.º 4
0
 /// <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;
             }
         }
     }
 }
Exemplo n.º 5
0
 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");
 }
Exemplo n.º 6
0
            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);
                }
            }
Exemplo n.º 7
0
    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++;
                }
            }
        }
    }
Exemplo n.º 8
0
        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");
            }
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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();
            });
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
 public Variable(string Name, MemorySlot Data)
 {
     this.Name = Name;
     this.Data = Data;
 }