Ejemplo n.º 1
0
    MinMaxValue GetWindStrength()
    {
        MinMaxValue minMaxAvgValue = new MinMaxValue();

        minMaxAvgValue.LowLimit  = -10;
        minMaxAvgValue.HighLimit = 10;
        float min = 0, max = 0;

        for (int i = 0; i < WindMaterials.Length; i++)
        {
            float StrengthValue = WindMaterials[i].GetFloat("Vector1_36BC0FD6");
            if (min > StrengthValue)
            {
                min = StrengthValue;
            }
            else if (max < StrengthValue)
            {
                max = StrengthValue;
            }
        }

        minMaxAvgValue.minValue = min;
        minMaxAvgValue.maxValue = max;

        return(minMaxAvgValue);
    }
Ejemplo n.º 2
0
 public MinMaxValue(MinMaxValue temp)
 {
     minValue  = temp.minValue;
     maxValue  = temp.maxValue;
     LowLimit  = temp.LowLimit;
     HighLimit = temp.HighLimit;
 }
Ejemplo n.º 3
0
    private void CopyHealProperty(HealProperty prop)
    {
        eStat scaling = new eStat();

        scaling = prop.scaleFactor;

        MinMaxValue[] values = new MinMaxValue[5];

        for (int i = 0; i < 5; i++)
        {
            MinMaxValue val = new MinMaxValue(prop.healPerLevel [i].min, prop.healPerLevel [i].max);
            values [i] = val;
        }

        bool targetCaster = prop.targetCasterOverride;
        bool affectCaster = prop.affectsCaster;
        bool allies       = prop.affectsAllyPlayers;
        bool allySummon   = prop.affectsAllySummons;
        bool enemies      = prop.affectsEnemyPlayers;
        bool enemySummon  = prop.affectsAllySummons;

        HealProperty newProp = new HealProperty();

        newProp.scaleFactor          = scaling;
        newProp.healPerLevel         = values;
        newProp.targetCasterOverride = targetCaster;
        newProp.affectsCaster        = affectCaster;
        newProp.affectsAllyPlayers   = allies;
        newProp.affectsAllySummons   = allySummon;
        newProp.affectsEnemyPlayers  = enemies;
        newProp.affectsEnemySummons  = enemySummon;

        ability.critHealEffects.Add(newProp);
    }
Ejemplo n.º 4
0
        public double SetEps(double eps0)
        {
            if (_Values.Count < 2)
            {
                Initialize();
            }
            var n1 = _Values.First;
            var n2 = n1.Next;

            var I       = 0d;
            var v1      = n1.Value;
            var x1      = v1.Key;
            var y1      = _DoubleConverter(v1.Value);
            var eps1    = 0d;
            var min_max = new MinMaxValue();
            var dI      = y1 / 2;

            min_max.AddValue(y1);
            do
            {
                var v2 = n2.Value;
                var x2 = v2.Key;
                var y2 = _DoubleConverter(v2.Value);
                min_max.AddValue(y2);

                var eps = GetEps(x1, x2, y1, y2);

                if (eps < eps0)
                {
                    if (eps > eps1)
                    {
                        eps1 = eps;
                    }
                    n1  = n2;
                    dI += y2 / 2;
                    I  += dI * (x2 - x1);
                    dI  = y2 / 2;
                    y1  = y2;
                    x1  = x2;
                    n2  = n1.Next;
                    continue;
                }

                x2 = (x1 + x2) / 2;
                v2 = new KeyValuePair <double, T>(x2, _Function(x2));
                n2 = _Values.AddAfter(n1, v2);
            } while (n2 != null);

            if (eps1.Equals(0d))
            {
                eps1 = eps0;
            }
            Set(ref _Eps0, eps1, nameof(Eps0));
            Set(ref _Min, min_max.Min, nameof(Min));
            Set(ref _Max, min_max.Max, nameof(Max));
            Set(ref _Integral, I, nameof(Integral));
            return(eps1);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Generate data for the request, return Constrain.NoValue instead of null
        /// </summary>
        /// <param name="request">data request</param>
        /// <returns>generated data</returns>
        public override object GenerateData(DataRequest request)
        {
            if (!request.Populate)
            {
                return(LocateValue);
            }
            MinMaxValue <int> lengthMinMax;

            if (request.ExtraInfo is MemberInfo)
            {
                lengthMinMax = GetMemberInfoStringLength(request.ExtraInfo as MemberInfo);

                if (lengthMinMax.Min < 0)
                {
                    lengthMinMax.Min = 5;
                }
                if (lengthMinMax.Max == int.MaxValue)
                {
                    lengthMinMax.Max = 16;
                }
            }
            else
            {
                lengthMinMax = new MinMaxValue <int> {
                    Min = 5, Max = 16
                };
            }

            lengthMinMax.Min = _constraintHelper.GetValue(request.Constraints, lengthMinMax.Min, "min", "minlength");
            lengthMinMax.Max = _constraintHelper.GetValue(request.Constraints, lengthMinMax.Max, "max", "maxlength");

            var prefix = _constraintHelper.GetValue(request.Constraints, string.Empty, "prefix", "pre", "seed");

            if (!string.IsNullOrEmpty(prefix))
            {
                lengthMinMax.Min -= prefix.Length;
                lengthMinMax.Max -= prefix.Length;
            }

            var postfix = _constraintHelper.GetValue(request.Constraints, string.Empty, "postfix", "post");

            if (!string.IsNullOrEmpty(postfix))
            {
                lengthMinMax.Min -= postfix.Length;
                lengthMinMax.Max -= postfix.Length;
            }

            var stringType = _constraintHelper.GetValue(request.Constraints, StringType.MostCharacter, "stringType", "Type");

            if (lengthMinMax.Min > lengthMinMax.Max)
            {
                lengthMinMax.Min = lengthMinMax.Max;
            }

            return(prefix + _dataGenerator.NextString(stringType, lengthMinMax.Min, lengthMinMax.Max) + postfix);
        }
Ejemplo n.º 6
0
    private void CopyBuffDebuffProperty(BuffDebuffProperty prop)
    {
        eStat stat = new eStat();

        stat = prop.stat;

        eElement res = new eElement();

        res = prop.resistance;

        MinMaxValue[] values = new MinMaxValue[5];

        int[] durations = new int[5];

        for (int i = 0; i < 5; i++)
        {
            MinMaxValue val = new MinMaxValue(prop.valuePerLevel [i].min, prop.valuePerLevel [i].max);
            values [i] = val;
        }

        for (int i = 0; i < 5; i++)
        {
            int val = prop.durationPerLevel [i];
            durations [i] = val;
        }

        bool isResist   = prop.isResistanceModifier;
        bool resistable = prop.resistable;
        bool isBuff     = prop.isBuff;

        bool targetCaster = prop.targetCasterOverride;
        bool affectCaster = prop.affectsCaster;
        bool allies       = prop.affectsAllyPlayers;
        bool allySummon   = prop.affectsAllySummons;
        bool enemies      = prop.affectsEnemyPlayers;
        bool enemySummon  = prop.affectsAllySummons;

        BuffDebuffProperty newProp = new BuffDebuffProperty();

        newProp.isResistanceModifier = isResist;
        newProp.isBuff     = isBuff;
        newProp.resistable = resistable;

        newProp.resistance           = res;
        newProp.stat                 = stat;
        newProp.valuePerLevel        = values;
        newProp.targetCasterOverride = targetCaster;
        newProp.affectsCaster        = affectCaster;
        newProp.affectsAllyPlayers   = allies;
        newProp.affectsAllySummons   = allySummon;
        newProp.affectsEnemyPlayers  = enemies;
        newProp.affectsEnemySummons  = enemySummon;

        ability.critBuffDebuffEffects.Add(newProp);
    }
Ejemplo n.º 7
0
    public void InitCount(Single[] pers, Single angle = 0, Color[] colors = null)
    {
        var tmpMM = new MinMaxValue[pers.Length];

        for (var i = 0; i < pers.Length; i++)
        {
            tmpMM[i].Min = 0;
            tmpMM[i].Max = pers[i];
        }
        InitCount(tmpMM, angle, colors);
    }
    void SetWindSetArtistTool()
    {
        VisualElement root = rootVisualElement;

        root.Clear();
        //Loads and clones our VisualTree inside the root.
        VisualTreeAsset quickToolVisualTree = Resources.Load <VisualTreeAsset>("WindArtistTool");

        quickToolVisualTree.CloneTree(root);
        root.styleSheets.Add(Resources.Load <StyleSheet>("WindArtistTool"));



        #region Wind Shader
        // Set Initial Values
        VisualElement windComponent = root.Q <VisualElement>(name: "Wind");
        if (windComponent != null)
        {
            Vector4Field windDirectionQuaternion = windComponent.Q <Vector4Field>(name: "WindDirection");
            windDirectionQuaternion.value = GetWindDirection();

            FloatField windScaleFloat = windComponent.Q <FloatField>(name: "WindScale");
            windScaleFloat.value = GetWindScale();

            MinMaxValue minMaxStrength = GetWindStrength();

            VisualElement windStrengthHolder = windComponent.Q <VisualElement>(name: "WinStrengthHolder");

            MinMaxSlider windStrengthSlider = windStrengthHolder.Q <MinMaxSlider>(name: "WindStrength");
            windStrengthSlider.highLimit = minMaxStrength.HighLimit;
            windStrengthSlider.lowLimit  = minMaxStrength.LowLimit;
            windStrengthSlider.value     = new Vector2(minMaxStrength.minValue, minMaxStrength.maxValue);

            windStrengthHolder.Q <Label>(name: "MinValue").text = "Min Value :" + minMaxStrength.minValue;
            windStrengthHolder.Q <Label>(name: "MaxValue").text = "Max Value :" + minMaxStrength.maxValue;

            FloatField windSpeedFloat = windComponent.Q <FloatField>(name: "WindSpeed");
            windSpeedFloat.value = GetWindSpeed();

            //Set Callbacks values
            windDirectionQuaternion.RegisterCallback <ChangeEvent <Vector4> >(ChangeWindDirection);
            windScaleFloat.RegisterCallback <ChangeEvent <float> >(ChangeWindScale);
            windStrengthSlider.RegisterCallback <ChangeEvent <Vector2> >(ChangeWindStrength);
            windSpeedFloat.RegisterCallback <ChangeEvent <float> >(ChangeWindSpeed);
        }

        #endregion

        root.Q <Button>(name: "SaveButton").clicked  += SaveButton;
        root.Q <Button>(name: "ResetButton").clicked += ResetToInitialSceneValues;
    }
Ejemplo n.º 9
0
        private void AlarmList_Load(object sender, EventArgs e)
        {
            try
            {
                MinMaxValue mmv = null;
                if (UnitNO == 5)
                {
                    dtAvg = TableMinMaxValue.getDatasFiveWithValueToData();
                    foreach (DataRow row in dtAvg.Rows)
                    {
                        mmv             = (MinMaxValue)TagLJValue.MinMaxValueHsFive["F" + row["TagID"].ToString()];
                        row["AvgValue"] = mmv.AvgValue * mmv.AvgToDataRate;
                    }
                    dtTotal = FTableTotalTags.getDataTableByRowFilter("IsResetShow=1");
                    DataTable dtTemp = GlobalVariables.dtOneRowTotalDataFive;
                    foreach (DataRow row in dtTotal.Rows)
                    {
                        try { row["TotalValue"] = dtTemp.Rows[0]["F" + row["id"].ToString()]; }
                        catch { }
                    }
                }
                else if (UnitNO == 6)
                {
                    dtAvg = TableMinMaxValue.getDatasSixWithValueToData();
                    foreach (DataRow row in dtAvg.Rows)
                    {
                        mmv             = (MinMaxValue)TagLJValue.MinMaxValueHsSix["F" + row["TagID"].ToString()];
                        row["AvgValue"] = mmv.AvgValue * mmv.AvgToDataRate;
                    }
                    dtTotal = STableTotalTags.getDataTableByRowFilter("IsResetShow=1");
                    DataTable dtTemp = GlobalVariables.dtOneRowTotalDataSix;
                    foreach (DataRow row in dtTotal.Rows)
                    {
                        try { row["TotalValue"] = dtTemp.Rows[0]["F" + row["id"].ToString()]; }
                        catch { }
                    }
                }

                dataGridView1.AutoGenerateColumns = false;
                this.dataGridView1.DataSource     = dtAvg;
                dataGridView2.AutoGenerateColumns = false;
                this.dataGridView2.DataSource     = dtTotal;
            }
            catch (Exception ex)
            {
                WriteLog.WriteLogs(ex.ToString());
                MessageBox.Show("无数据");
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Generate a set of the min max value
        /// </summary>
        /// The most minimum value in all min max values is globalMin, and
        /// the most maximum value in all min max values is globalMax.
        /// The number of offset will be padded at the two ends of each min max value
        /// orderly according to the num of min max values.
        /// <param name="globalMin">The most minimum value</param>
        /// <param name="globalMax">The most maximum value</param>
        /// <param name="offset">
        /// The unit offset to be padded at two ends of min max value</param>
        /// <param name="num">The number of min max values to be generated</param>
        /// <returns>An array of generated min max values</returns>
        public static MinMaxValue[] GetOffsetCluster(
            float globalMin, float globalMax, float offset, int num)
        {
            Debug.Assert(
                globalMin <= globalMax,
                $"{nameof(globalMin)} is greater than {nameof(globalMax)}");
            Debug.Assert(
                globalMax - globalMin > offset,
                $"{nameof(offset)} is greater than the range " +
                $"from the {nameof(globalMin)} to {nameof(globalMax)}");

            var range        = (globalMax - globalMin) - offset * (num - 1);
            var minMaxValues = new MinMaxValue[num];

            for (var i = 0; i < num; ++i)
            {
                var min = offset * i;
                var max = min + range;
                minMaxValues[i] = new MinMaxValue(min, max);
            }

            return(minMaxValues);
        }
Ejemplo n.º 11
0
        private MinMaxValue <int> GetMemberInfoStringLength(MemberInfo memberInfo)
        {
            var returnValue = new MinMaxValue <int> {
                Min = -1, Max = int.MaxValue
            };

            var attribute = memberInfo.GetCustomAttributes().FirstOrDefault(a => a.GetType().Name == "StringLengthAttribute");

            if (attribute != null)
            {
                var minProperty = attribute.GetType().GetRuntimeProperty("MinimumLength");
                var maxProperty = attribute.GetType().GetRuntimeProperty("MaximumLength");

                if (minProperty != null)
                {
                    var localMin = (int)minProperty.GetValue(attribute);

                    if (localMin.CompareTo(returnValue.Min) > 0)
                    {
                        returnValue.Min = localMin;
                    }
                }

                if (maxProperty != null)
                {
                    var localMax = (int)maxProperty.GetValue(attribute);

                    if (localMax.CompareTo(returnValue.Max) < 0)
                    {
                        returnValue.Max = localMax;
                    }
                }
            }

            return(returnValue);
        }
Ejemplo n.º 12
0
    void SetArtistTool()
    {
        VisualElement root = rootVisualElement;

        root.Clear();
        VisualTreeAsset ArtistToolVisualTree = Resources.Load <VisualTreeAsset>("ArtistTool");

        ArtistToolVisualTree.CloneTree(root);
        root.styleSheets.Add(Resources.Load <StyleSheet>("ArtistTool"));

        SerializedObject Tso        = new SerializedObject(TimeController);
        Slider           timeSlider = root.Q <Slider>(name: "Time");

        timeSlider.Bind(Tso);


        #region SkyColor
        VisualElement gradientVisualElement = root.Q <VisualElement>(name: "SkyGradient");

        if (gradientVisualElement != null)
        {
            GradientField gradientField = gradientVisualElement.Q <GradientField>();

            if (gradientField != null)
            {
                skyColorSetter = GameObject.Find("Light - Sky").GetComponent <MaterialColorSetter>();
                SerializedObject serialized_MaterialSetter = new SerializedObject(skyColorSetter);
                gradientField.bindingPath = "gradient";
                gradientField.Bind(serialized_MaterialSetter);
                gradientVisualElement.Q <Label>().text = "Sky Gradient";
            }
        }

        #endregion

        #region Ruins
        GradientEditorSetter("RuinsGradient", "Ruins Gradient", RuinsColorSetter);
        #endregion

        #region Trees
        GradientEditorSetter("TreesGradient", "Trees Gradient", TreesColorSetter);
        #endregion

        #region Rim
        GradientEditorSetter("RimColor", "Rim Gradient", RimColorSetter);
        #endregion



        #region Lights

        #region SunLights
        SerializedObject serialized_SunSpot = new SerializedObject(SunSpot_Group);

        VisualElement sunLightVisualElement = root.Q <VisualElement>(name: "Sunlight");
        if (sunLightVisualElement.Q <VisualElement>(name: "LightGradient") != null)
        {
            GradientField sunLightGradient  = sunLightVisualElement.Q <VisualElement>(name: "LightGradient").Q <GradientField>();
            FloatField    sunLightIntensity = root.Q <FloatField>(name: "Intensity");
            if (sunLightGradient != null)
            {
                sunLightGradient.bindingPath = "gradient";
                sunLightGradient.Bind(serialized_SunSpot);
                sunLightGradient.label = "Gradient";
            }

            sunLightIntensity.value = GetSpotLightIntensity();
            sunLightIntensity.RegisterCallback <ChangeEvent <float> >(ChangeIntensitySpotLightsEvent);
        }

        #endregion

        #region GrassLight
        SerializedObject serialized_GrassLight_Group = new SerializedObject(GrassLight_Group);

        VisualElement grassLightVisualElement = root.Q <VisualElement>(name: "GrassLight");
        if (grassLightVisualElement.Q <VisualElement>(name: "LightGradient") != null)
        {
            GradientField grassLightGradient  = grassLightVisualElement.Q <VisualElement>(name: "LightGradient").Q <GradientField>();
            FloatField    grassLightIntensity = grassLightVisualElement.Q <FloatField>(name: "Intensity");

            if (grassLightGradient != null)
            {
                grassLightGradient.bindingPath = "gradient";
                grassLightGradient.Bind(serialized_GrassLight_Group);
                grassLightGradient.label = "Gradient";
            }

            grassLightIntensity.value = GrassLight.intensity;

            SerializedObject serialized_GrassLight = new SerializedObject(GrassLight);
            grassLightIntensity.Bind(serialized_GrassLight);
        }
        #endregion

        #region cave Light
        SerializedObject serialized_CaveHoleLight = new SerializedObject(CaveHoleLight);

        VisualElement caveLightVisualElement = root.Q <VisualElement>(name: "CaveHoleLight");
        caveLightVisualElement.Q <FloatField>(name: "Falloff").Bind(serialized_CaveHoleLight);

        Slider     fallOffSlider = caveLightVisualElement.Q <Slider>(name: "FalloffIntencity");
        FloatField fallOffField  = fallOffSlider.Q <FloatField>(name: "CurrentValue");
        fallOffSlider.Bind(serialized_CaveHoleLight);

        fallOffField.SetValueWithoutNotify(CaveHoleLight.falloffIntensity);

        fallOffField.RegisterCallback <ChangeEvent <float> >((evt) => fallOffSlider.value = evt.newValue);

        fallOffSlider.RegisterCallback <ChangeEvent <float> >((evt) => fallOffField.SetValueWithoutNotify(evt.newValue));

        #endregion

        #region Visualisers
        var AllGradientElements = root.Query <GradientField>();
        AllGradientElements.ForEach((element) =>
        {
            //registerCallback for Gradient to apply changes on scene
            element.RegisterCallback <ChangeEvent <Gradient> >(ChangeGradientEvent);

            VisualElement visualiser = element.Q <VisualElement>(name: "VisualisationColor");

            //Init color of visualisation cube
            float currentTime = TimeController.timeValue;
            visualiser.style.backgroundColor = element.value.Evaluate(currentTime);

            //register Callback for each visualisation cube when gradient Changes
            element.RegisterCallback <ChangeEvent <Gradient> >((evt) =>
            {
                float timeOfChange = TimeController.timeValue;
                visualiser.style.backgroundColor = evt.newValue.Evaluate(currentTime);
            });

            //register Callback for each visualisation cube when Time Changes
            timeSlider.RegisterCallback <ChangeEvent <float> >((evt) =>
            {
                visualiser.style.backgroundColor = element.value.Evaluate(evt.newValue);
            });
        });
        #endregion

        #endregion

        #region Wind Shader
        // Set Initial Values
        VisualElement windComponent = root.Q <VisualElement>(name: "Wind");
        if (windComponent != null)
        {
            Vector4Field windDirectionQuaternion = windComponent.Q <Vector4Field>(name: "WindDirection");
            windDirectionQuaternion.value = GetWindDirection();

            FloatField windScaleFloat = windComponent.Q <FloatField>(name: "WindScale");
            windScaleFloat.value = GetWindScale();

            MinMaxValue minMaxStrength = GetWindStrength();

            VisualElement windStrengthHolder = windComponent.Q <VisualElement>(name: "WinStrengthHolder");

            MinMaxSlider windStrengthSlider = windStrengthHolder.Q <MinMaxSlider>(name: "WindStrength");
            windStrengthSlider.highLimit = minMaxStrength.HighLimit;
            windStrengthSlider.lowLimit  = minMaxStrength.LowLimit;
            windStrengthSlider.value     = new Vector2(minMaxStrength.minValue, minMaxStrength.maxValue);

            windStrengthHolder.Q <Label>(name: "MinValue").text = "Min Value :" + minMaxStrength.minValue;
            windStrengthHolder.Q <Label>(name: "MaxValue").text = "Max Value :" + minMaxStrength.maxValue;

            FloatField windSpeedFloat = windComponent.Q <FloatField>(name: "WindSpeed");
            windSpeedFloat.value = GetWindSpeed();

            //Set Callbacks values
            windDirectionQuaternion.RegisterCallback <ChangeEvent <Vector4> >(ChangeWindDirection);
            windScaleFloat.RegisterCallback <ChangeEvent <float> >(ChangeWindScale);
            windStrengthSlider.RegisterCallback <ChangeEvent <Vector2> >(ChangeWindStrength);
            windSpeedFloat.RegisterCallback <ChangeEvent <float> >(ChangeWindSpeed);
        }

        #endregion

        #region Postprocessing
        #region WhiteBalance
        //serialize White balance property
        SerializedObject serialized_whiteBalanceProperty = new SerializedObject(whiteBalanceProperty);
        //Get White balance Visual Element
        VisualElement whiteBalanceVisualElement = root.Q <VisualElement>(name: "WhiteBalance");

        #region Temperature
        //Get White Balance temperature Visual Element
        VisualElement whiteBalanceTemperatureVE = whiteBalanceVisualElement.Q <VisualElement>(name: "Temperature");

        //Get White Balance temperature Slider
        Slider whiteBalanceTemperatureSlider = whiteBalanceTemperatureVE.Q <Slider>(name: "SliderValue");

        //Bind Slider to value
        whiteBalanceTemperatureSlider.bindingPath = "temperature.m_Value";
        whiteBalanceTemperatureSlider.Bind(serialized_whiteBalanceProperty);

        //Get White Balance temperature Float Field
        FloatField whiteBalanceTemperatureFloat = whiteBalanceTemperatureVE.Q <FloatField>(name: "CurrentValue");
        //Set default Temperature
        whiteBalanceTemperatureFloat.SetValueWithoutNotify(whiteBalanceProperty.temperature.value);

        //Register change callback for the float field to change the slider value. Changing slider value will change the values bound with it.
        whiteBalanceTemperatureFloat.RegisterCallback <ChangeEvent <float> >((evt) => whiteBalanceTemperatureSlider.value = evt.newValue);

        //Register change Callback for the slider, to change the float fiel Without notification (to avoid triggering Float field callback)
        whiteBalanceTemperatureSlider.RegisterCallback <ChangeEvent <float> >((evt) => whiteBalanceTemperatureFloat.SetValueWithoutNotify(evt.newValue));
        #endregion

        #region Tint

        //Get White Balance Tint Visual Element
        VisualElement whiteBalanceTintVE = whiteBalanceVisualElement.Q <VisualElement>(name: "Tint");

        //Get White Balance Tint Slider
        Slider whiteBalanceTintSlider = whiteBalanceTintVE.Q <Slider>(name: "SliderValue");

        //Bind Slider to value
        whiteBalanceTintSlider.bindingPath = "tint.m_Value";
        whiteBalanceTintSlider.Bind(serialized_whiteBalanceProperty);

        //Get White Balance Tint Float Field
        FloatField whiteBalanceTintFloat = whiteBalanceTintVE.Q <FloatField>(name: "CurrentValue");
        //Set default Tint
        whiteBalanceTintFloat.SetValueWithoutNotify(whiteBalanceProperty.tint.value);

        //Register change callback for the float field to change the slider value. Changing slider value will change the values bound with it.
        whiteBalanceTintFloat.RegisterCallback <ChangeEvent <float> >((evt) => whiteBalanceTintSlider.value = evt.newValue);

        //Register change Callback for the slider, to change the float fiel Without notification (to avoid triggering Float field callback)
        whiteBalanceTintSlider.RegisterCallback <ChangeEvent <float> >((evt) => whiteBalanceTintFloat.SetValueWithoutNotify(evt.newValue));
        #endregion

        #endregion

        #region Bloom

        //serialize bloom property
        SerializedObject serialized_BloomProperty = new SerializedObject(BloomProperty);
        //Get Bloom Visual Element
        VisualElement bloomVisualElement = root.Q <VisualElement>(name: "Bloom");

        //Get Bloom Tint Color
        ColorField bloomTint = bloomVisualElement.Q <ColorField>(name: "Tint");

        //Bind color to value
        bloomTint.bindingPath = "tint.m_Value";
        bloomTint.Bind(serialized_BloomProperty);

        //Get Bloom Intensity
        FloatField bloomIntensity = bloomVisualElement.Q <FloatField>(name: "Intensity");

        //Bind Intensity to value
        bloomIntensity.Bind(serialized_BloomProperty);

        #endregion
        #endregion


        #region VFX

        SerializedObject serialized_GlowParticleSystem = new SerializedObject(GlowParticleSystem);

        VisualElement VFXVisualElement = root.Q <VisualElement>(name: "VFX");


        VFXVisualElement.Q <FloatField>(name: "Emission").bindingPath = "EmissionModule.rateOverTime.scalar";
        VFXVisualElement.Q <FloatField>(name: "Emission").Bind(serialized_GlowParticleSystem);

        VFXVisualElement.Q <EnumField>(name: "RenderMode").Init(GlowParticleSystem.GetComponent <ParticleSystemRenderer>().renderMode);
        VFXVisualElement.Q <EnumField>(name: "RenderMode").RegisterCallback <ChangeEvent <string> >(ChangeRenderMode);

        VFXVisualElement.Q <ObjectField>(name: "Material").objectType = typeof(Material);
        VFXVisualElement.Q <ObjectField>(name: "Material").RegisterCallback <ChangeEvent <string> >(ChangeRenderMaterial);
        #endregion

        root.Q <Button>(name: "SaveButton").clicked  += SaveButton;
        root.Q <Button>(name: "ResetButton").clicked += ResetToInitialSceneValues;
    }
Ejemplo n.º 13
0
        private void timerChartBind_Tick(object sender, EventArgs e)
        {
            DataRow row;

            if (lTotalCount < TagLJValue.GetTotalCount(UnitNO))
            {
                lTotalCount = TagLJValue.GetTotalCount(UnitNO);
                dtChart.Dispose();
                dtChart = null;
                dtChart = TagLJValue.GetTotalDataWithNewTable(UnitNO);
                if (dtChart.Rows.Count > 0)
                {
                    dHourOfYear = double.Parse(dtChart.Rows[dtChart.Rows.Count - 1]["HourOfYear"].ToString());
                    if (rdoTotalHours.Checked == true)
                    {
                        chart1.Series[0].XValueMember = "HourOfYear";
                        chart1.Series[0].XValueType   = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
                        dXMin = double.Parse(dtChart.Rows[0]["HourOfYear"].ToString());
                        chart1.ChartAreas[0].AxisX.MajorGrid.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Auto;
                        chart1.ChartAreas[0].AxisX.MajorGrid.Interval     = (dHourOfYear - dXMin) / 10;
                        chart1.ChartAreas[0].AxisX.IntervalType           = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Auto;
                        chart1.ChartAreas[0].AxisX.Interval          = (dHourOfYear - dXMin) / 10;
                        chart1.ChartAreas[0].AxisX.Title             = "供热期累计小时数";
                        chart1.ChartAreas[0].AxisX.LabelStyle.Format = "0";
                    }
                    else
                    {
                        DateTime timeBegin = (DateTime)dtChart.Rows[0]["ValueTime"];
                        DateTime timeEnd   = (DateTime)dtChart.Rows[dtChart.Rows.Count - 1]["ValueTime"];
                        chart1.Series[0].XValueMember = "ValueTime";
                        chart1.Series[0].XValueType   = System.Windows.Forms.DataVisualization.Charting.ChartValueType.DateTime;
                        chart1.ChartAreas[0].AxisX.MajorGrid.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Hours;
                        chart1.ChartAreas[0].AxisX.MajorGrid.Interval     = (timeEnd - timeBegin).TotalHours / 6;
                        chart1.ChartAreas[0].AxisX.IntervalType           = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Hours;
                        chart1.ChartAreas[0].AxisX.Interval          = (timeEnd - timeBegin).TotalHours / 6;
                        chart1.ChartAreas[0].AxisX.Title             = "时间";
                        chart1.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd HH:mm";
                    }
                    chart1.ChartAreas[0].AxisY.Title = "累计节标煤量:" + Math.Round(double.Parse(dtChart.Rows[dtChart.Rows.Count - 1][F18].ToString()), 2) + "吨";
                    row = dtChart.NewRow();
                    row["ValueTime"]  = DateTime.Parse(dtChart.Rows[dtChart.Rows.Count - 1]["ValueTime"].ToString()).AddSeconds(1);
                    row["HourOfYear"] = dHourOfYear + 0.0001;
                    dtChart.Rows.Add(row);
                }
            }
            row = dtChart.NewRow();
            row["ValueTime"]  = DateTime.Now;
            dHourOfYear      += timerChartBind.Interval / 1000 / 3600d;
            row["HourOfYear"] = dHourOfYear;
            MinMaxValue mmv = TagLJValue.GetMinMaxValue(F3197, UnitNO);

            if (UnitNO == 5)
            {
                chart1.ChartAreas[0].AxisX.Title = "供热期累计小时数:" + Math.Round(dHourOfYear, 4).ToString("0.0000")
                                                   + "                累计开始时间:" + mmv.BeginDateString + "\n节标煤量最小值:"
                                                   + mmv.MinValue.ToString("0.0000") + "        节标煤量最小值时间:" + mmv.MinDateString
                                                   + "\n节标煤量最大值:" + mmv.MaxValue.ToString("0.0000") + "        节标煤量最大值时间:"
                                                   + mmv.MaxDateString + "\n节标煤量平均值:" + TagLJValue.GetTotalDataAvg(F18, UnitNO) + "吨/小时        累计节省费用:"
                                                   + Math.Round(double.Parse(GlobalVariables.dtChartTotalDatasFive.Rows[GlobalVariables.dtChartTotalDatasFive.Rows.Count - 1][F19].ToString()), 2) + "万元";
            }
            else if (UnitNO == 6)
            {
                chart1.ChartAreas[0].AxisX.Title = "供热期累计小时数:" + Math.Round(dHourOfYear, 4).ToString("0.0000")
                                                   + "                累计开始时间:" + mmv.BeginDateString + "\n节标煤量最小值:"
                                                   + mmv.MinValue.ToString("0.0000") + "        节标煤量最小值时间:" + mmv.MinDateString
                                                   + "\n节标煤量最大值:" + mmv.MaxValue.ToString("0.0000") + "        节标煤量最大值时间:"
                                                   + mmv.MaxDateString + "\n节标煤量平均值:" + TagLJValue.GetTotalDataAvg(F18, UnitNO) + "吨/小时        累计节省费用:"
                                                   + Math.Round(double.Parse(GlobalVariables.dtChartTotalDatasSix.Rows[GlobalVariables.dtChartTotalDatasSix.Rows.Count - 1][F19].ToString()), 2) + "万元";
            }
            chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Near;
            dtChart.Rows.Add(row);
            chart1.DataSource = dtChart;
            chart1.DataBind();
        }
Ejemplo n.º 14
0
Archivo: GDLJSR.cs Proyecto: zzh-git/KS
 private void timerChartBind_Tick(object sender, EventArgs e)
 {
     try
     {
         DataRow row;
         if (lTotalCount < TagLJValue.GetTotalCount(UnitNO))
         {
             lTotalCount = TagLJValue.GetTotalCount(UnitNO);
             dtChart.Dispose();
             dtChart = null;
             dtChart = TagLJValue.GetTotalDataWithNewTable(UnitNO);
             if (dtChart.Rows.Count > 0)
             {
                 dHourOfYear = double.Parse(dtChart.Rows[dtChart.Rows.Count - 1]["HourOfYear"].ToString());
                 if (rdoTotalHours.Checked == true)
                 {
                     chart1.Series[0].XValueMember = "HourOfYear";
                     chart1.Series[0].XValueType   = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
                     dXMin = double.Parse(dtChart.Rows[0]["HourOfYear"].ToString());
                     chart1.ChartAreas[0].AxisX.MajorGrid.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Auto;
                     chart1.ChartAreas[0].AxisX.MajorGrid.Interval     = (int)(dHourOfYear - dXMin) / 10;
                     chart1.ChartAreas[0].AxisX.IntervalType           = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Auto;
                     chart1.ChartAreas[0].AxisX.Interval          = (int)(dHourOfYear - dXMin) / 10;
                     chart1.ChartAreas[0].AxisX.Title             = "供热期累计小时数";
                     chart1.ChartAreas[0].AxisX.LabelStyle.Format = "0";
                 }
                 else
                 {
                     DateTime timeBegin = (DateTime)dtChart.Rows[0]["ValueTime"];
                     DateTime timeEnd   = (DateTime)dtChart.Rows[dtChart.Rows.Count - 1]["ValueTime"];
                     chart1.Series[0].XValueMember = "ValueTime";
                     chart1.Series[0].XValueType   = System.Windows.Forms.DataVisualization.Charting.ChartValueType.DateTime;
                     chart1.ChartAreas[0].AxisX.MajorGrid.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Hours;
                     chart1.ChartAreas[0].AxisX.MajorGrid.Interval     = (int)(timeEnd - timeBegin).TotalHours / 6;
                     chart1.ChartAreas[0].AxisX.IntervalType           = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Hours;
                     chart1.ChartAreas[0].AxisX.Interval          = (int)(timeEnd - timeBegin).TotalHours / 6;
                     chart1.ChartAreas[0].AxisX.Title             = "时间";
                     chart1.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd HH:mm";
                 }
                 chart1.ChartAreas[0].AxisY.Title = "供电累计收入:" + Math.Round(double.Parse(dtChart.Rows[dtChart.Rows.Count - 1][F6].ToString()), 2) + "(万元)";
                 row = dtChart.NewRow();
                 row["ValueTime"]  = DateTime.Parse(dtChart.Rows[dtChart.Rows.Count - 1]["ValueTime"].ToString()).AddSeconds(1);
                 row["HourOfYear"] = dHourOfYear + 0.0001;
                 dtChart.Rows.Add(row);
             }
         }
         row = dtChart.NewRow();
         row["ValueTime"]  = DateTime.Now;
         dHourOfYear      += timerChartBind.Interval / 1000 / 3600d;
         row["HourOfYear"] = dHourOfYear;
         MinMaxValue mmv = TagLJValue.GetMinMaxValue(F3226, UnitNO);
         chart1.ChartAreas[0].AxisX.Title = "供热期累计小时数:" + Math.Round(dHourOfYear, 4).ToString("0.0000")
                                            + "                累计开始时间:" + mmv.BeginDateString + "\n供电收入最小值:"
                                            + Math.Round(mmv.MinValue / 10000, 4).ToString("0.0000") + "        供电收入最小值时间:" + mmv.MinDateString
                                            + "\n供电收入最大值:" + Math.Round(mmv.MaxValue / 10000, 4).ToString("0.0000") + "        供电收入最大值时间:"
                                            + mmv.MaxDateString + "\n供电收入平均值:" + TagLJValue.GetTotalDataAvg(F6, UnitNO) + "万元/小时";
         chart1.ChartAreas[0].AxisX.TitleAlignment = StringAlignment.Near;
         dtChart.Rows.Add(row);
         chart1.DataSource = dtChart;
         chart1.DataBind();
         WriteLog.WriteLogs("timerChartBind:" + timerChartBind.Enabled);
     }
     catch (Exception ex)
     { WriteLog.WriteLogs(ex.ToString()); }
 }
Ejemplo n.º 15
0
    private void GenerateUV(Mesh mesh)
    {
        Vector3[] vertices = mesh.vertices;
        Vector3[] normals  = mesh.normals;
        Vector2[] uvs      = new Vector2[vertices.Length];

        // Height should always be scaled to entire building because of small quads

        for (int i = 0; i < vertices.Length; i += 6)
        {
            Vector3 normal = normals[i];
            float   angle  = Vector3.Angle(normal, Vector3.forward) + 180.0f;

            // Get quad vertices
            Vector3[] quadVertices = vertices.Skip(i).Take(6).ToArray();

            // Check if quad is part of a bigger building
            bool smallQuad = quadVertices.Max(value => value.y) > vertices.Max(value => value.y);

            // get min max vertices of quad
            MinMaxValue minMaxX = new MinMaxValue
            {
                Min = quadVertices.Min(value => value.x),
                Max = quadVertices.Max(value => value.x)
            };

            MinMaxValue minMaxY = new MinMaxValue
            {
                Min = quadVertices.Min(value => value.y),
                Max = smallQuad ? quadVertices.Max(value => value.y) : vertices.Max(value => value.y)
            };

            MinMaxValue minMaxZ = new MinMaxValue
            {
                Min = quadVertices.Min(value => value.z),
                Max = quadVertices.Max(value => value.z)
            };

            // How much of the texture will be mapped and the starting offset
            float textureAmount, textureOffset;

            // Top & Bottom
            if (normal == Vector3.up || normal == Vector3.down)
            {
                textureAmount = 0.25f;
                textureOffset = 0.75f;

                for (int j = 0; j < quadVertices.Length; j++)
                {
                    uvs[i + j] = new Vector2
                    {
                        x = Mathf.InverseLerp(minMaxX.Min, minMaxX.Max, quadVertices[j].x) * textureAmount + textureOffset,
                        y = Mathf.InverseLerp(minMaxZ.Min, minMaxZ.Max, quadVertices[j].z)
                    };
                }
            }
            // Front & Back
            else if (180.0f <= angle && angle <= 220.0f)
            {
                textureAmount = 0.5f;
                textureOffset = 0.0f;

                for (int j = 0; j < quadVertices.Length; j++)
                {
                    uvs[i + j] = new Vector2
                    {
                        x = Mathf.InverseLerp(minMaxX.Min, minMaxX.Max, quadVertices[j].x) * textureAmount + textureOffset,
                        y = Mathf.InverseLerp(minMaxY.Min, minMaxY.Max, quadVertices[j].y)
                    };
                }
            }
            // Sides
            else
            {
                textureAmount = 0.25f;
                textureOffset = 0.5f;

                for (int j = 0; j < quadVertices.Length; j++)
                {
                    uvs[i + j] = new Vector2
                    {
                        x = Mathf.InverseLerp(minMaxZ.Min, minMaxZ.Max, quadVertices[j].z) * textureAmount + textureOffset,
                        y = Mathf.InverseLerp(minMaxY.Min, minMaxY.Max, quadVertices[j].y)
                    };
                }
            }
        }

        mesh.uv = uvs;
    }
Ejemplo n.º 16
0
        public async Task <double> SetEpsAsync(double eps0, IProgress <double> progress = null, CancellationToken cancel = default)
        {
            await Task.Yield();

            if (_Values.Count < 2)
            {
                await Task.Factory.StartNew(Initialize, cancel).ConfigureAwait(true);
            }

            var n1 = _Values.First;
            var n2 = n1.Next;

            var I       = 0d;
            var v1      = n1.Value;
            var x1      = v1.Key;
            var y1      = _DoubleConverter(v1.Value);
            var eps1    = 0d;
            var min_max = new MinMaxValue();
            var dI      = y1 / 2;

            min_max.AddValue(y1);
            var Dx = _X2 - _X1;

            progress?.Report(0d);
            do
            {
                var v2 = n2.Value;
                var x2 = v2.Key;
                var y2 = _DoubleConverter(v2.Value);
                min_max.AddValue(y2);

                var eps = GetEps(x1, x2, y1, y2);

                if (eps < eps0)
                {
                    if (eps > eps1)
                    {
                        eps1 = eps;
                    }
                    n1  = n2;
                    dI += y2 / 2;
                    I  += dI * (x2 - x1);
                    dI  = y2 / 2;
                    y1  = y2;
                    x1  = x2;
                    n2  = n1.Next;
                    progress?.Report((x1 - _X1) / Dx);
                    continue;
                }

                x2 = (x1 + x2) / 2;
                v2 = new KeyValuePair <double, T>(x2, _Function(x2));
                n2 = _Values.AddAfter(n1, v2);
            } while (n2 != null);
            progress?.Report(1d);
            if (eps1.Equals(0d))
            {
                eps1 = eps0;
            }
            Set(ref _Eps0, eps1, nameof(Eps0));
            Set(ref _Min, min_max.Min, nameof(Min));
            Set(ref _Max, min_max.Max, nameof(Max));
            Set(ref _Integral, I, nameof(Integral));
            return(eps1);
        }
Ejemplo n.º 17
0
Archivo: LJSZMX.cs Proyecto: zzh-git/KS
        private void timerChartBind_Tick(object sender, EventArgs e)
        {
            DataRow row;

            if (lTotalCount < TagLJValue.GetTotalCount(UnitNO))
            {
                lTotalCount = TagLJValue.GetTotalCount(UnitNO);
                dtChart.Dispose();
                dtChart = null;
                dtChart = TagLJValue.GetTotalDataWithNewTable(UnitNO);
                if (dtChart.Rows.Count > 0)
                {
                    dHourOfYear = double.Parse(dtChart.Rows[dtChart.Rows.Count - 1]["HourOfYear"].ToString());
                    if (rdoTotalHours.Checked == true)
                    {
                        dXMin = double.Parse(dtChart.Rows[0]["HourOfYear"].ToString());

                        for (int i = 0; i < sChartNames.Length; i++)
                        {
                            chartTemp = (Chart)pnlData.Controls.Find(sChartNames[i], true)[0];
                            chartTemp.Series[0].XValueMember = "HourOfYear";
                            chartTemp.Series[0].XValueType   = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Double;
                            chartTemp.ChartAreas[0].AxisX.MajorGrid.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Auto;
                            chartTemp.ChartAreas[0].AxisX.MajorGrid.Interval     = (int)(dHourOfYear - dXMin) / bHourOfYearGridCount;
                            chartTemp.ChartAreas[0].AxisX.IntervalType           = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Auto;
                            chartTemp.ChartAreas[0].AxisX.Interval          = (int)(dHourOfYear - dXMin) / bHourOfYearGridCount;
                            chartTemp.ChartAreas[0].AxisX.Title             = "供热期累计小时数(h)";
                            chartTemp.ChartAreas[0].AxisX.LabelStyle.Format = "0";
                            //chartTemp.ChartAreas[0].AxisY.Title = string.Format(sYValueLabels[i], Math.Round(double.Parse(dtChart.Rows[dtChart.Rows.Count - 1][sYValueMembers[i]].ToString()), 2));
                            chartTemp.Series[0].LegendText = string.Format(sYValueLabels[i], Math.Round(double.Parse(dtChart.Rows[dtChart.Rows.Count - 1][sYValueMembers[i]].ToString()), 2));
                        }
                    }
                    else
                    {
                        DateTime timeBegin = (DateTime)dtChart.Rows[0]["ValueTime"];
                        DateTime timeEnd   = (DateTime)dtChart.Rows[dtChart.Rows.Count - 1]["ValueTime"];

                        for (int i = 0; i < sChartNames.Length; i++)
                        {
                            chartTemp = (Chart)pnlData.Controls.Find(sChartNames[i], true)[0];
                            chartTemp.Series[0].XValueMember = "ValueTime";
                            chartTemp.Series[0].XValueType   = System.Windows.Forms.DataVisualization.Charting.ChartValueType.DateTime;
                            chartTemp.ChartAreas[0].AxisX.MajorGrid.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Hours;
                            chartTemp.ChartAreas[0].AxisX.MajorGrid.Interval     = (int)(timeEnd - timeBegin).TotalHours / bDateTimeGridCount;
                            chartTemp.ChartAreas[0].AxisX.IntervalType           = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Hours;
                            chartTemp.ChartAreas[0].AxisX.Interval          = (int)(timeEnd - timeBegin).TotalHours / bDateTimeGridCount;
                            chartTemp.ChartAreas[0].AxisX.Title             = "日期时间(t)";
                            chartTemp.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd HH:mm";
                            //chartTemp.ChartAreas[0].AxisY.Title = string.Format(sYValueLabels[i], Math.Round(double.Parse(dtChart.Rows[dtChart.Rows.Count - 1][sYValueMembers[i]].ToString()), 2));
                            chartTemp.Series[0].LegendText = string.Format(sYValueLabels[i], Math.Round(double.Parse(dtChart.Rows[dtChart.Rows.Count - 1][sYValueMembers[i]].ToString()), 2));
                        }
                    }
                    row = dtChart.NewRow();
                    row["ValueTime"]  = DateTime.Parse(dtChart.Rows[dtChart.Rows.Count - 1]["ValueTime"].ToString()).AddSeconds(1);
                    row["HourOfYear"] = dHourOfYear + 0.0001;
                    dtChart.Rows.Add(row);
                }
            }
            row = dtChart.NewRow();
            row["ValueTime"]  = DateTime.Now;
            dHourOfYear      += timerChartBind.Interval / 1000 / 3600d;
            row["HourOfYear"] = dHourOfYear;
            MinMaxValue mmv = TagLJValue.GetMinMaxValue(F3225, UnitNO);

            //chartRLLJZC.ChartAreas[0].AxisX.Title = "供热期累计小时数:" + Math.Round(dHourOfYear, 4).ToString("0.0000")
            //    + "                累计开始时间:" + mmv.BeginDateString + "\n燃料支出最小值:"
            //    + Math.Round(mmv.MinValue / 10000, 4).ToString("0.0000") + "        燃料支出最小值时间:" + mmv.MinDateString
            //    + "\n燃料支出最大值:" + Math.Round(mmv.MaxValue / 10000, 4).ToString("0.0000") + "        燃料支出最大值时间:"
            //    + mmv.MaxDateString + "\n燃料支出平均值:" + TagLJValue.GetTotalDataAvg(F10, UnitNO) + "万元/小时";
            lblMsg.Text = "供热期累计小时数:" + Math.Round(dHourOfYear, 4).ToString("0.0000") + "        累计开始时间:" + mmv.BeginDateString + "        双击每个图可以放大显示。";
            dtChart.Rows.Add(row);

            foreach (string sChartName in sChartNames)
            {
                chartTemp            = (Chart)pnlData.Controls.Find(sChartName, true)[0];
                chartTemp.DataSource = dtChart;
                chartTemp.DataBind();
            }
        }
Ejemplo n.º 18
0
        private static void TimerThreadRunner()
        {
            MinMaxValue<long> sleepTime = new MinMaxValue<long>(0);
            List<IntervalTimer> deprecated = new List<IntervalTimer>();

            while (true)
            {
                if (_threadWait.WaitOne((int)sleepTime.Min) == true)
                    break;

                using (_lock.ReaderLock)
                {
                    deprecated.Clear();
                    sleepTime.Reset(100);

                    foreach (var timer in _queue)
                    {
                        long remainTime = timer.Interval - (_stopwatch.ElapsedMilliseconds - timer._lastCallTime);
                        if (remainTime > 0)
                            sleepTime.Value = remainTime;
                        else
                        {
                            timer._lastCallTime = _stopwatch.ElapsedMilliseconds;
                            SpinWorker.Dispatch(timer._action);

                            //  호출횟수 만료
                            if (timer._remainCount != -1 &&
                                --timer._remainCount == 0)
                                deprecated.Add(timer);
                        }
                    }
                }

                foreach (var timer in deprecated)
                    timer.Dispose();
            }
            _timerThread = null;
        }