private void Zooming()
        {
            var zoomingStrength = GetZoomingStrength();

            if (FloatUtil.NearlyEqual(zoomingStrength, 0f))
            {
                return;
            }

            _viewModel.OnZooming(zoomingStrength, Time.deltaTime);
        }
        public override bool Equals(object obj)
        {
            // assume this is only ever compared against another CameraTransformValue
            var other = (CameraTransformValue)obj;

            return(FloatUtil.NearlyEqual(Position.x, other.Position.x) &&
                   FloatUtil.NearlyEqual(Position.y, other.Position.y) &&
                   FloatUtil.NearlyEqual(Position.z, other.Position.z) &&
                   FloatUtil.NearlyEqual(Rot.x, other.Rot.x) &&
                   FloatUtil.NearlyEqual(Rot.y, other.Rot.y) &&
                   FloatUtil.NearlyEqual(Rot.z, other.Rot.z) &&
                   FloatUtil.NearlyEqual(Rot.w, other.Rot.w));
        }
        private void Panning() //consider adding panning with middle mouse button
        {
            var panningStrength = GetPanningStrength();

            if (FloatUtil.NearlyEqual(panningStrength, 0f))
            {
                return;
            }

            var mousePosition = Input.mousePosition;

            var panningDirection = (mousePosition - new Vector3(Screen.width / 2f, Screen.height / 2f, 0)).normalized;

            panningDirection.z = panningDirection.y;
            panningDirection.y = 0;

            _viewModel.OnPanning(panningDirection, GetPanningStrength(), Time.deltaTime);
        }
Exemple #4
0
            private void CreatePaletteButtonHintLabel(UBuilder builder,
                                                      bool showMph,
                                                      SpeedValue speedValue,
                                                      SpeedLimitPaletteButton button,
                                                      UPanel buttonPanel)
            {
                // Other speed unit info label
                string otherUnit = showMph
                                       ? ToKmphPreciseString(speedValue)
                                       : ToMphPreciseString(speedValue);

                // Choose label text under the button
                string GetSpeedButtonHintText()
                {
                    if (FloatUtil.NearlyEqual(speedValue.GameUnits, 0.0f))
                    {
                        return(Translation.SpeedLimits.Get("Palette.Text:Default"));
                    }

                    if (speedValue.GameUnits >= SpeedValue.UNLIMITED)
                    {
                        return(Translation.SpeedLimits.Get("Palette.Text:Unlimited"));
                    }

                    return(otherUnit);
                }

                ULabel label = button.AltUnitsLabel =
                    builder.Label_(
                        parent: buttonPanel,
                        t: GetSpeedButtonHintText(),
                        stack: UStackMode.Below);

                label.width         = SpeedLimitPaletteButton.SELECTED_WIDTH;
                label.textAlignment = UIHorizontalAlignment.Center;
                label.ContributeToBoundingBox(false); // parent ignore our width
            }
        private float GetZoomingStrength()
        {
            var zoomInput     = Input.GetAxis("Mouse ScrollWheel");
            var inputStrength = Mathf.Abs(zoomInput);

            if (!FloatUtil.NearlyEqual(zoomInput, 0f))
            {
                _currentZoomingDirection = Mathf.Sign(zoomInput) * (config.IsInvertedWheel ? -1f : 1f);
            }

            if (!FloatUtil.NearlyEqual(zoomInput, 0f))
            {
                //accelerating
                _accumulatedZoomingDecelerationValue = 0;
                _accumulatedZoomingValue            += inputStrength;
                _accumulatedZoomingValue             = Mathf.Clamp01(_accumulatedZoomingValue);
            }
            else if (!FloatUtil.NearlyEqual(_accumulatedZoomingValue, 0f))
            {
                //decelerating

                _accumulatedZoomingDecelerationValue += config.DecelerationSpeed * Time.deltaTime;
                _accumulatedZoomingDecelerationValue  = Mathf.Clamp01(_accumulatedZoomingDecelerationValue);

                _accumulatedZoomingValue -= Easing.ExponentialEaseInOut(_accumulatedZoomingDecelerationValue, config.SmoothFactor);
                _accumulatedZoomingValue  = Mathf.Clamp01(_accumulatedZoomingValue);
            }
            else
            {
                //all is set, do nothing
                _currentZoomingDirection = 0f;
                return(0);
            }

            return(_currentZoomingDirection * Easing.ExponentialEaseInOut(_accumulatedZoomingValue, config.SmoothFactor));
        }
        /// <summary>
        /// The window for selecting and applying a speed limit
        /// </summary>
        /// <param name="num"></param>
        private void GuiSpeedLimitsWindow(int num)
        {
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();

            Color             oldColor       = GUI.color;
            List <SpeedValue> allSpeedLimits = EnumerateSpeedLimits(SpeedUnit.CurrentlyConfigured);

            allSpeedLimits.Add(new SpeedValue(0)); // add last item: no limit

            bool showMph     = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph;
            var  column      = 0u; // break palette to a new line at breakColumn
            int  breakColumn = showMph ? BREAK_PALETTE_COLUMN_MPH : BREAK_PALETTE_COLUMN_KMPH;

            foreach (SpeedValue speedLimit in allSpeedLimits)
            {
                // Highlight palette item if it is very close to its float speed
                if (FloatUtil.NearlyEqual(currentPaletteSpeedLimit.GameUnits, speedLimit.GameUnits))
                {
                    GUI.color = Color.gray;
                }

                GuiSpeedLimitsWindow_AddButton(showMph, speedLimit);
                GUI.color = oldColor;

                // TODO: This can be calculated from SpeedLimit MPH or KMPH limit constants
                column++;
                if (column % breakColumn == 0)
                {
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();
                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                }
            }

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            //---------------------
            // UI buttons row
            //---------------------
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();

            if (GUILayout.Button(Translation.GetString("Default_speed_limits"),
                                 GUILayout.Width(200)))
            {
                TrafficManagerTool.ShowAdvisor(this.GetType().Name + "_Defaults");
                defaultsWindowVisible = true;
            }

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            //---------------------
            // Checkboxes row
            //---------------------
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            showLimitsPerLane = GUILayout.Toggle(
                showLimitsPerLane,
                Translation.GetString("Show_lane-wise_speed_limits"));

            GUILayout.FlexibleSpace();

            // Display MPH checkbox, if ticked will save global config
            bool displayMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph;

            displayMph = GUILayout.Toggle(displayMph, Translation.GetString("Display_speed_limits_mph"));

            if (GlobalConfig.Instance.Main.DisplaySpeedLimitsMph != displayMph)
            {
                OptionsGeneralTab.SetDisplayInMph(displayMph);
            }

            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            DragWindow(ref paletteWindowRect);
        }