Exemple #1
0
    private void instantiateSparks(Collision2D col)
    {
        if (col.gameObject.layer != Consts.FloorLayer)
        {
            return;
        }
        var kmPerH = CalculateUtils.UnitsPerSecondToKmPerH(rb.velocity.magnitude);

        if (kmPerH < 5)
        {
            return;
        }
        float angle = CalculateUtils.Vector2ToAngle(rb.velocity);

        if (Time.time > lastTime + SPARKS_INSTANTIATE_PERIOD)
        {
            lastTime = Time.time;
            for (int i = 0; i < col.contactCount; i++)
            {
                sparksParticle = particleSystemContainer.NextAndPlay();
                var emission = sparksParticle.emission;
                emission.rateOverTime = kmPerH * EMISSION_RATE;
                sparksParticle.transform.localScale = new Vector3(kmPerH * SCALE_RATE, 1, 1);
                sparksParticle.transform.position   = new Vector3(col.GetContact(i).point.x, col.GetContact(i).point.y, Z_POSSITION);
                sparksParticle.transform.rotation   = Quaternion.Euler(0, 0, angle);
            }
        }
    }
Exemple #2
0
    private void detect(Car car, ContactPoint2D[] burnContacts, PiekaMaterial frontWheelMaterial, PiekaMaterial rearWheelMaterial)
    {
        var velocityInKmPerH = CalculateUtils.UnitsPerSecondToKmPerH(car.FrontPartRigidbody.velocity.magnitude);

        handleBurn(car.FrontWheelCollider, car.FrontWheelSpriteRenderer, BurnInfo.WhichWheelEnum.FRONT, car.FrontWheel.AngularVelocity < 0 ? BurnInfo.DirectionEnum.LEFT : BurnInfo.DirectionEnum.RIGHT, car.Drive.FrontWheelKmPerH, velocityInKmPerH, burnContacts, frontWheelMaterial);
        handleBurn(car.RearWheelCollider, car.RearWheelSpriteRenderer, BurnInfo.WhichWheelEnum.REAR, car.RearWheel.AngularVelocity < 0 ? BurnInfo.DirectionEnum.LEFT : BurnInfo.DirectionEnum.RIGHT, car.Drive.RearWheelKmPerH, velocityInKmPerH, burnContacts, rearWheelMaterial);
    }
Exemple #3
0
    void Update()
    {
        float frontWheelRPM = Mathf.Abs(FrontWheelRpm);
        float rearWheelRPM  = Mathf.Abs(RearWheelRpm);

        FrontWheelKmPerH = CalculateUtils.WheelRpmToKmPerHour(frontWheelRPM, frontWheel.DiameterInMeters);
        RearWheelKmPerH  = CalculateUtils.WheelRpmToKmPerHour(rearWheelRPM, rearWheel.DiameterInMeters);
    }
Exemple #4
0
 public void TestCalculateVectorAngle()
 {
     Assert.AreEqual(0, CalculateUtils.Vector2ToAngle(new Vector2(1, 0)), 1);
     Assert.AreEqual(45, CalculateUtils.Vector2ToAngle(new Vector2(1, 1)), 1);
     Assert.AreEqual(90, CalculateUtils.Vector2ToAngle(new Vector2(0, 1)), 1);
     Assert.AreEqual(135, CalculateUtils.Vector2ToAngle(new Vector2(-1, 1)), 1);
     Assert.AreEqual(180, CalculateUtils.Vector2ToAngle(new Vector2(-1, 0)), 1);
     Assert.AreEqual(225, CalculateUtils.Vector2ToAngle(new Vector2(-1, -1)), 1);
     Assert.AreEqual(270, CalculateUtils.Vector2ToAngle(new Vector2(0, -1)), 1);
     Assert.AreEqual(315, CalculateUtils.Vector2ToAngle(new Vector2(1, -1)), 1);
 }
        /// <summary>
        /// Places a figure on the tile
        /// </summary>
        /// <param name="currentTile">The tile, to put figure on</param>
        /// <param name="side">Which side of tile should be the figure placed</param>
        public bool PlaceFigure(GamePlay gamePlay, int side)
        {
            var tileToPlace = gamePlay.PlacedTiles.Last();

            if (!CanPlaceFigure(tileToPlace, side, gamePlay))
            {
                return(false);
            }

            if (gamePlay.FigureDown)
            {
                gamePlay.FigureDown           = false;
                gamePlay.CurrentSideForFigure = -1;

                IFigure figureToGetDown = null;
                if (side == 4 && tileToPlace is Church)
                {
                    figureToGetDown          = tileToPlace.CenterFigure;
                    tileToPlace.CenterFigure = null;
                }
                else
                {
                    figureToGetDown = tileToPlace.Directions[side].Figure;
                    tileToPlace.Directions[side].Figure = null;
                }

                if (figureToGetDown != null)
                {
                    CalculateUtils.GiveBackFigureToOwner(figureToGetDown, ref gamePlay.Players);
                }
                return(false);
            }
            else
            {
                var playerFigure = gamePlay.CurrentPlayer.Figures.RemoveAndGet(0);
                if (side == 4 && tileToPlace is Church)
                {
                    tileToPlace.CenterFigure = playerFigure;
                }
                else
                {
                    tileToPlace.Directions[side].Figure = playerFigure;
                }

                gamePlay.FigureDown           = true;
                gamePlay.CurrentSideForFigure = side;
                return(true);
            }
        }
Exemple #6
0
    public static float Angle(SpriteShapeController spriteShapeController, int pointIndex)
    {
        var spline      = spriteShapeController.spline;
        var pointsCount = spline.GetPointCount();

        if (pointIndex == 0)
        {
            return(CalculateUtils.Vector2ToAngle(spline.GetPosition(1) - spline.GetPosition(0)));
        }
        if (pointIndex == pointsCount - 1)
        {
            return(CalculateUtils.Vector2ToAngle(spline.GetPosition(pointIndex) - spline.GetPosition(pointIndex - 1)));
        }
        return(CalculateUtils.Vector2ToAngle(spline.GetPosition(pointIndex + 1) - spline.GetPosition(pointIndex - 1)));
    }
Exemple #7
0
 private void btnTestExpression_Click(object sender, EventArgs e)
 {
     try
     {
         if (string.IsNullOrEmpty(txtUserExpression.Text))
         {
             throw new Exception();
         }
         double result = CalculateUtils.CalculateInfixExpression(txtUserExpression.Text, "x", 10);
         ShowSuccessMessage("x = 10, Xo = " + result);
     }
     catch (Exception exception)
     {
         ShowErrorMessage("Biểu thức không hợp lệ!");
     }
 }
Exemple #8
0
    void Update()
    {
        var   rpm    = Mathf.Abs(rb.angularVelocity / 6);
        float kmPerh = CalculateUtils.WheelRpmToKmPerHour(rpm, wheel.DiameterInMeters);

        kmPerh -= 10;
        kmPerh  = kmPerh < 0 ? 0 : kmPerh;
        var block = new MaterialPropertyBlock();
        int index = (int)(kmPerh / 10) + 1;

        index = index > 4 ? 4 : index;
        while (kmPerh >= 10)
        {
            kmPerh -= 10;
        }
        block.SetTexture("_ATex", sprites[index - 1].texture);
        block.SetTexture("_BTex", sprites[index].texture);
        block.SetFloat("_Trans", kmPerh / 10);
        GetComponent <SpriteRenderer>().SetPropertyBlock(block);
    }
Exemple #9
0
        private async void btnGetData_Click(object sender, EventArgs e)
        {
            // GetData
            //object data = Utils.FileUtils.ReadSampleDataAsObject();
            //var sampleData = SampleData.FromJson(data.ToString());

            var budgetsData = await Utils.FileUtils.ReadBudgetDataAsync();

            var budgetsDataJson = Budget.FromJson(budgetsData);

            var contractsData = await Utils.FileUtils.ReadContractsDataAsync();

            var contractsDataJson = Contract.FromJson(contractsData);

            var workData = await Utils.FileUtils.ReadWorkDataAsync();

            var workDataJson = Work.FromJson(workData);

            var budgetsOver  = CalculateUtils.CalculateOverImputed(budgetsDataJson, workDataJson);
            var budgetsUnder = CalculateUtils.CalculateUnderImputed(budgetsDataJson, workDataJson);

            this.gridOverImputed.DataSource  = budgetsOver;
            this.gridUnderImputed.DataSource = budgetsUnder;
        }
Exemple #10
0
        public void Calculate(ITile currentTile, bool gameover, ref List <Player> players)
        {
            int  points         = 0;
            var  allSurrTiles   = TileUtils.GetAllSurroundingTiles(currentTile);
            bool isCalledChurch = false;

            allSurrTiles.Add(currentTile);

            foreach (ITile tile in allSurrTiles)
            {
                if (tile is Church)
                {
                    var            church = (Church)tile;
                    List <IFigure> figures;
                    foreach (var side in church.Directions)
                    {
                        if (side.Landscape == Landscape.Road)
                        {
                            isCalledChurch = true;
                        }
                    }

                    points += ChurchCalculatorService.calculate(tile, gameover);

                    if (points != 0)
                    {
                        Console.WriteLine("");
                        Console.WriteLine("");
                        Console.WriteLine($"Ennyi pontot találtam: {points}, és CHURCH vagyok");
                        Console.WriteLine("");
                        Console.WriteLine("");
                        figures = FigureService.GetFiguresToGiveBack(tile, 0, true);
                        Console.WriteLine("");
                        Console.WriteLine("");
                        Console.WriteLine($"Ennyi figurat találtam: {figures.Count}, és CHURCH vagyok");
                        Console.WriteLine("");
                        Console.WriteLine("");
                        CalculateUtils.DistributePoints(points, figures);
                        foreach (var figure in figures)
                        {
                            CalculateUtils.GiveBackFigureToOwner(figure, ref players);
                        }
                    }
                    points = 0;
                }
            }

            //Searching for castle sides, paying attention to be called only once
            for (int i = 0; i < 4; i++)
            {
                if (currentTile.Directions[i].Landscape == Landscape.Castle)
                {
                    List <IFigure> figures;

                    var pointDirections = CastleCalculatorService.calculate(currentTile, gameover);
                    foreach (var item in pointDirections)
                    {
                        points = item.Value;
                        Console.WriteLine("");
                        Console.WriteLine("");
                        Console.WriteLine($"Erre megyek: {item.Key}, ennyi pontot találtam: {item.Value}, és CASTLE vagyok");
                        Console.WriteLine("");
                        Console.WriteLine("");
                        if (points != 0)
                        {
                            figures = FigureService.GetFiguresToGiveBack(currentTile, item.Key, true);
                            Console.WriteLine("");
                            Console.WriteLine("");
                            Console.WriteLine($"Ennyi figurat találtam: {figures.Count}, és CASTLE vagyok");
                            Console.WriteLine("");
                            Console.WriteLine("");
                            CalculateUtils.DistributePoints(points, figures);
                            foreach (var figure in figures)
                            {
                                CalculateUtils.GiveBackFigureToOwner(figure, ref players);
                            }
                        }
                    }
                    break;
                }
            }

            //Searching for road sides, paying attention to be called only once
            for (int i = 0; i < 4; i++)
            {
                if (currentTile.Directions[i].Landscape == Landscape.Road)
                {
                    List <IFigure> figures;
                    var            pointDirections = RoadCalculatorService.calculate(currentTile, gameover);
                    foreach (var item in pointDirections)
                    {
                        points = item.Value;
                        Console.WriteLine("");
                        Console.WriteLine("");
                        Console.WriteLine($"Erre megyek: {item.Key}, ennyi pontot találtam: {item.Value}, és ROAD vagyok");
                        Console.WriteLine("");
                        Console.WriteLine("");
                        if (points != 0)
                        {
                            figures = FigureService.GetFiguresToGiveBack(currentTile, item.Key, !isCalledChurch);
                            Console.WriteLine("");
                            Console.WriteLine("");
                            Console.WriteLine($"Ennyi figurat találtam: {figures.Count}, és ROAD vagyok");
                            Console.WriteLine("");
                            Console.WriteLine("");
                            CalculateUtils.DistributePoints(points, figures);
                            foreach (var figure in figures)
                            {
                                CalculateUtils.GiveBackFigureToOwner(figure, ref players);
                            }
                        }
                    }
                    break;
                }
            }
        }
Exemple #11
0
        private void addEdit()
        {
            try
            {
                if (_addEditState == 0 || _editingSensor == null)
                {
                    _editingSensor        = new Sensor();
                    _editingSensor.Logger = _logger;
                }

                string functionParameters = "";
                int    formulaType        = 0;

                if (caclSelectTabs.SelectedTab == linearTab)
                {
                    formulaType        = CalculationBLL.FORMULA_LINEAR;
                    functionParameters = string.Format(CalculationBLL.PARAMS_LINEAR,
                                                       linear_C0.Text.ToDecimalTryParse().ToDecimalString(),
                                                       linear_C1.Text.ToDecimalTryParse().ToDecimalString());
                }
                else if (caclSelectTabs.SelectedTab == arcToLengthTab)
                {
                    formulaType        = arc_Degree.Checked ? CalculationBLL.FORMULA_ARCTOLENGTH_DEGREE : CalculationBLL.FORMULA_ARCTOLENGTH_RADIAN;
                    functionParameters = string.Format(CalculationBLL.PARAMS_ARCTOLENGTH_DEGREE,
                                                       arc_Length.Text.ToDecimalTryParse().ToDecimalString()
                                                       );
                }
                else if (caclSelectTabs.SelectedTab == polynomialTab)
                {
                    formulaType        = CalculationBLL.FORMULA_POLYNOMIAL;
                    functionParameters = string.Format(CalculationBLL.PARAMS_POLYNOMIAL,
                                                       poly_C0.Text.ToDecimalTryParse().ToDecimalString(),
                                                       poly_C1.Text.ToDecimalTryParse().ToDecimalString(),
                                                       poly_C2.Text.ToDecimalTryParse().ToDecimalString(),
                                                       poly_C3.Text.ToDecimalTryParse().ToDecimalString(),
                                                       poly_C4.Text.ToDecimalTryParse().ToDecimalString(),
                                                       poly_C5.Text.ToDecimalTryParse().ToDecimalString()
                                                       );
                }
                else if (caclSelectTabs.SelectedTab == temperatureCompTab)
                {
                    formulaType        = CalculationBLL.FORMULA_TEMPRATURE_COMP;
                    functionParameters = string.Format(CalculationBLL.PARAMS_TEMPRATURE_COMP,
                                                       temp_Tk.Text.ToDecimalTryParse().ToDecimalString(),
                                                       temp_Ti.Text.ToDecimalTryParse().ToDecimalString(),
                                                       temp_Tc.SelectedValue,//
                                                       temp_C0.Text.ToDecimalTryParse().ToDecimalString(),
                                                       temp_C1.Text.ToDecimalTryParse().ToDecimalString(),
                                                       temp_C2.Text.ToDecimalTryParse().ToDecimalString(),
                                                       temp_C3.Text.ToDecimalTryParse().ToDecimalString(),
                                                       temp_C4.Text.ToDecimalTryParse().ToDecimalString(),
                                                       temp_C5.Text.ToDecimalTryParse().ToDecimalString()
                                                       );
                }
                else if (caclSelectTabs.SelectedTab == vwLinearTab)
                {
                    formulaType        = CalculationBLL.FORMULA_VW_LINEAR;
                    functionParameters = string.Format(CalculationBLL.PARAMS_VW_LINEAR,
                                                       vwLinear_Tk.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwLinear_Ti.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwLinear_Tc.SelectedValue, //
                                                       vwLinear_CK.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwLinear_Li.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwLinear_Lm.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwLinear_Bi.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwLinear_Bc.SelectedValue,
                                                       vwLinear_D.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwLinear_E.Text.ToDecimalTryParse().ToDecimalString()
                                                       );
                }
                else if (caclSelectTabs.SelectedTab == vwPoly)
                {
                    formulaType        = CalculationBLL.FORMULA_VW_POLY;
                    functionParameters = string.Format(CalculationBLL.PARAMS_VW_POLY,
                                                       vwPoly_Tk.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwPoly_Ti.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwPoly_Tc.SelectedValue, //
                                                       vwPoly_A.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwPoly_B.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwPoly_Lm.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwPoly_Bi.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwPoly_Bc.SelectedValue,
                                                       vwPoly_C.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwPoly_D.Text.ToDecimalTryParse().ToDecimalString(),
                                                       vwPoly_E.Text.ToDecimalTryParse().ToDecimalString()
                                                       );
                }
                else if (caclSelectTabs.SelectedTab == tabUserDefine)
                {
                    try
                    {
                        if (string.IsNullOrEmpty(txtUserExpression.Text))
                        {
                            throw new Exception();
                        }
                        double result = CalculateUtils.CalculateInfixExpression(txtUserExpression.Text, "x", 10);
                        formulaType = CalculationBLL.FORMULA_USER_DEFINED;
                        _editingSensor.FormulaFunction = txtUserExpression.Text.Trim();
                    }
                    catch (Exception)
                    {
                        throw new Exception("Biểu thức không hợp lệ!");
                    }
                }



                _editingSensor.ColumnIndex = columnIndexNumeric.Value.ToInt32TryParse();
                _editingSensor.Name        = nameTextBox.Text;
                _editingSensor.Description = descriptionTextBox.Text;
                _editingSensor.Unit        = unitTextBox.Text;

                _editingSensor.AlarmEnabled = enableAlarmCheckBox.Checked;
                _editingSensor.MinValue     = string.IsNullOrEmpty(minAlarmTextBox.Text) ? null : (decimal?)minAlarmTextBox.Text.ToDecimalTryParse();
                _editingSensor.MaxValue     = string.IsNullOrEmpty(maxAlarmTextBox.Text) ? null : (decimal?)maxAlarmTextBox.Text.ToDecimalTryParse();

                _editingSensor.FunctionParameters = functionParameters;
                _editingSensor.FormulaType        = formulaType;
                // Add object
                if (_addEditState == STATE_ADDING)
                {
                    if (SensorBLL.Current.Insert(_editingSensor))
                    {
                        ShowSuccessMessage(Resources.Message_AddSensorSuccess);
                    }
                    prepareToAdd();
                    BindingData();
                    return;
                }
                // Edit object
                if (_addEditState == STATE_EDITING)
                {
                    if (SensorBLL.Current.Update(_editingSensor))
                    {
                        ShowSuccessMessage(Resources.Message_EditSensorSuccess);
                        //BindingData();
                    }
                    return;
                }
                if (_addEditState == STATE_BATCH_EDITING)
                {
                    if (ShowConfirmMessage("Bạn có muốn cập nhật đồng loạt " + sensorGridView.SelectedRows.Count +
                                           " sensors không?") == DialogResult.OK)
                    {
                        SensorBLL.Current.Validate(_editingSensor);
                        _editingSensor.LastEditedDate = DateTime.Now;
                        _editingSensor.LastEditedUser = AppContext.Current.LogedInUser.Username;
                        for (int i = 0; i < sensorGridView.SelectedRows.Count; i++)
                        {
                            int id  = sensorGridView.SelectedRows[i].Cells["SensorID"].Value.ToInt32TryParse();
                            var obj = entityConntext.Sensors.SingleOrDefault(ent => ent.SensorID == id);
                            if (obj != null)
                            {
                                if (updateInfo.Checked)
                                {
                                    obj.Unit = _editingSensor.Unit;
                                }
                                if (updateCalc.Checked)
                                {
                                    obj.FunctionParameters = _editingSensor.FunctionParameters;
                                    obj.FormulaType        = _editingSensor.FormulaType;
                                    obj.FormulaFunction    = _editingSensor.FormulaFunction;
                                }
                                if (updateAlarm.Checked)
                                {
                                    obj.AlarmEnabled = _editingSensor.AlarmEnabled;
                                    obj.MinValue     = _editingSensor.MinValue;
                                    obj.MaxValue     = _editingSensor.MaxValue;
                                }
                                obj.LastEditedDate = _editingSensor.LastEditedDate;
                                obj.LastEditedUser = _editingSensor.LastEditedUser;
                            }
                        }
                        entityConntext.SaveChanges();
                        ShowSuccessMessage(Resources.Message_EditSensorSuccess);
                        BindingData();
                    }
                }
                return;
            }
            catch (Exception exception)
            {
                ShowErrorMessage(exception.Message);
                if (_addEditState == 1)
                {
                    entityConntext.Refresh(RefreshMode.StoreWins, _editingSensor);
                }
            }
        }
Exemple #12
0
        /// <summary>
        /// Calculate value of a sensor entry
        /// </summary>
        /// <param name="sensorValue"></param>
        /// <returns></returns>
        public decimal?Calculating(SensorValue sensorValue)
        {
            int formulaType = sensorValue.Sensor.FormulaType;

            if (formulaType == FORMULA_USER_DEFINED && !string.IsNullOrEmpty(sensorValue.Sensor.FormulaFunction))
            {
                sensorValue.CalcValue = CalculateUtils.CalculateInfixExpression(sensorValue.Sensor.FormulaFunction, "x",
                                                                                sensorValue.RawValue.ToString().Replace(",", ".")).ToDecimalTryParse();
            }
            else
            {
                if (string.IsNullOrEmpty(sensorValue.Sensor.FunctionParameters))
                {
                    return(null);
                }
                string[] parameters;
                parameters = sensorValue.Sensor.FunctionParameters.Contains("#") ? sensorValue.Sensor.FunctionParameters.Split('#') : new string[] { sensorValue.Sensor.FunctionParameters };
                // Calculate value
                if (formulaType == FORMULA_LINEAR)
                {
                    if (parameters.Length < 2)
                    {
                        return(null);
                    }
                    sensorValue.CalcValue = CalculateUtils.Linear(sensorValue.RawValue,
                                                                  parameters[0].ToDecimalTryParse(),
                                                                  parameters[1].ToDecimalTryParse());
                }
                else if (formulaType == FORMULA_ARCTOLENGTH_DEGREE)
                {
                    if (parameters.Length < 1)
                    {
                        return(null);
                    }
                    sensorValue.CalcValue =
                        CalculateUtils.ArcToLengthDegree(sensorValue.RawValue.ToDoubleTryParse(),
                                                         parameters[0].ToDoubleTryParse()).ToDecimalTryParse();
                }
                else if (formulaType == FORMULA_ARCTOLENGTH_RADIAN)
                {
                    if (parameters.Length < 1)
                    {
                        return(null);
                    }
                    sensorValue.CalcValue =
                        CalculateUtils.ArcToLengthRadian(sensorValue.RawValue.ToDoubleTryParse(),
                                                         parameters[0].ToDoubleTryParse()).ToDecimalTryParse();
                }
                else if (formulaType == FORMULA_POLYNOMIAL)
                {
                    if (parameters.Length < 6)
                    {
                        return(null);
                    }

                    sensorValue.CalcValue =
                        CalculateUtils.Polynomial(sensorValue.RawValue.ToDoubleTryParse(),
                                                  parameters[0].ToDoubleTryParse(),
                                                  parameters[1].ToDoubleTryParse(),
                                                  parameters[2].ToDoubleTryParse(),
                                                  parameters[3].ToDoubleTryParse(),
                                                  parameters[4].ToDoubleTryParse(),
                                                  parameters[5].ToDoubleTryParse()).
                        ToDecimalTryParse();
                }
                else if (formulaType == FORMULA_TEMPRATURE_COMP)
                {
                    if (parameters.Length < 9)
                    {
                        return(null);
                    }

                    var tcSensor = SensorBLL.Current.GetByID(parameters[2].ToInt32TryParse());
                    if (tcSensor == null)
                    {
                        return(null);
                    }
                    var tcValue = tcSensor.SensorValues.SingleOrDefault(ent => ent.MeaTime == sensorValue.MeaTime);
                    if (tcValue == null)
                    {
                        return(null);
                    }

                    sensorValue.CalcValue = CalculateUtils.TemperatureComp(
                        sensorValue.RawValue.ToDoubleTryParse(),
                        parameters[0].ToDoubleTryParse(),
                        parameters[1].ToDoubleTryParse(),
                        tcValue.RawValue.ToDoubleTryParse(), // Raw value or calc value???
                        parameters[3].ToDoubleTryParse(),
                        parameters[4].ToDoubleTryParse(),
                        parameters[5].ToDoubleTryParse(),
                        parameters[6].ToDoubleTryParse(),
                        parameters[7].ToDoubleTryParse(),
                        parameters[8].ToDoubleTryParse()
                        ).ToDecimalTryParse();
                }
                else if (formulaType == FORMULA_VW_LINEAR)
                {
                    if (parameters.Length < 10)
                    {
                        return(null);
                    }

                    var tcSensor = SensorBLL.Current.GetByID(parameters[2].ToInt32TryParse());
                    if (tcSensor == null)
                    {
                        return(null);
                    }
                    var bcSensor = SensorBLL.Current.GetByID(parameters[7].ToInt32TryParse());
                    if (bcSensor == null)
                    {
                        return(null);
                    }
                    var tcValue = tcSensor.SensorValues.SingleOrDefault(ent => ent.MeaTime == sensorValue.MeaTime);
                    if (tcValue == null)
                    {
                        return(null);
                    }
                    var bcValue = bcSensor.SensorValues.SingleOrDefault(ent => ent.MeaTime == sensorValue.MeaTime);
                    if (bcValue == null)
                    {
                        return(null);
                    }
                    sensorValue.CalcValue = CalculateUtils.VwLinear(
                        parameters[0].ToDoubleTryParse(),
                        parameters[1].ToDoubleTryParse(),
                        tcValue.RawValue.ToDoubleTryParse(), // Raw value of Tc Sensor
                        parameters[3].ToDoubleTryParse(),
                        parameters[4].ToDoubleTryParse(),
                        parameters[5].ToDoubleTryParse(),
                        sensorValue.RawValue.ToDoubleTryParse(), // Raw value of current sensor (Lc)
                        parameters[6].ToDoubleTryParse(),
                        bcValue.RawValue.ToDoubleTryParse(),     // Raw value of Bc Sensor
                        parameters[8].ToDoubleTryParse(),
                        parameters[9].ToDoubleTryParse()
                        ).ToDecimalTryParse();
                }
                else if (formulaType == FORMULA_VW_POLY)
                {
                    if (parameters.Length < 11)
                    {
                        return(null);
                    }

                    var tcSensor = SensorBLL.Current.GetByID(parameters[2].ToInt32TryParse());
                    if (tcSensor == null)
                    {
                        return(null);
                    }
                    var bcSensor = SensorBLL.Current.GetByID(parameters[7].ToInt32TryParse());
                    if (bcSensor == null)
                    {
                        return(null);
                    }
                    var tcValue = tcSensor.SensorValues.SingleOrDefault(ent => ent.MeaTime == sensorValue.MeaTime);
                    if (tcValue == null)
                    {
                        return(null);
                    }
                    var bcValue = bcSensor.SensorValues.SingleOrDefault(ent => ent.MeaTime == sensorValue.MeaTime);
                    if (bcValue == null)
                    {
                        return(null);
                    }
                    sensorValue.CalcValue = CalculateUtils.VwPoly(
                        parameters[0].ToDoubleTryParse(),
                        parameters[1].ToDoubleTryParse(),
                        tcValue.RawValue.ToDoubleTryParse(), // Raw value of Tc Sensor
                        parameters[3].ToDoubleTryParse(),
                        parameters[4].ToDoubleTryParse(),
                        parameters[5].ToDoubleTryParse(),
                        sensorValue.RawValue.ToDoubleTryParse(), // Raw value of current sensor (Lc)
                        parameters[6].ToDoubleTryParse(),
                        bcValue.RawValue.ToDoubleTryParse(),     // Raw value of Bc Sensor
                        parameters[8].ToDoubleTryParse(),
                        parameters[9].ToDoubleTryParse(),
                        parameters[10].ToDoubleTryParse()
                        ).ToDecimalTryParse();
                }
            }

            return(sensorValue.CalcValue);
        }