Пример #1
0
    private static bool DrawGeneralConfigurationTab(Configuration config, float scale)
    {
        if (!ImGui.BeginTabItem(i18n.tab_header_settings))
        {
            return(false);
        }
        var changed = false;

        changed |= ImGui.Checkbox("Enable Compass", ref config.ImGuiCompassEnable);
        if (config.ImGuiCompassEnable)
        {
            ImGui.Indent();
            ImGui.PushItemWidth(200f * scale);

            if (ImGui.Button("Center horizontally##ImGui", new Vector2(200f, 25f)))
            {
                changed = true;
                var screenSizeCenterX = (ImGuiHelpers.MainViewport.Size * 0.5f).X;
                config.ImGuiCompassPosition = config.ImGuiCompassPosition with {
                    X = screenSizeCenterX - config.ImGuiCompassWidth * 0.5f
                };
            }

            changed |= ImGui.DragFloat2("Position##ImGui", ref config.ImGuiCompassPosition, 1f, float.MinValue, float.MaxValue, "%.f");
            changed |= ImGui.DragFloat("Width##ImGui", ref config.ImGuiCompassWidth, 1f, 150f, float.MaxValue, "%.f", ImGuiSliderFlags.AlwaysClamp);
            var mask = (int)((1 - config.ImGuiCompassReverseMaskPercentage) * 100);
            changed |= ImGui.SliderInt("Mask###ImGuiCompassMask", ref mask, 0, 90,
                                       "%d %%");

            config.ImGuiCompassReverseMaskPercentage = 1 - mask / 100f;
            changed |= ImGui.SliderFloat("Scale##ImGui", ref config.ImGuiCompassScale, 0.02f, 3f, "%.2f");
            changed |= ImGui.SliderFloat("Minimum Scale Factor##ImGuiCompass_AreaMap", ref config.ImGuiCompassMinimumIconScaleFactor, 0.00f, 1f, "%.2f",
                                         ImGuiSliderFlags.AlwaysClamp);

            changed |= ImGui.DragInt("Cardinals Offset##ImGui", ref config.ImGuiCompassCardinalsOffset);

            var visibility = (int)config.Visibility;
            ImGui.Text("Visibility");
            changed |= ImGui.RadioButton("Always##ImGuiCompass", ref visibility, 0);
            ImGui.SameLine();
            changed |= ImGui.RadioButton("Not in Combat##ImGuiCompass", ref visibility, 1);
            ImGui.SameLine();
            changed |= ImGui.RadioButton("Only in Combat##ImGuiCompass", ref visibility, 2);
            if (changed)
            {
                config.Visibility = (CompassVisibility)visibility;
            }

            changed |= ImGui.Checkbox("Show Cardinals##ImGui", ref config.ShowCardinals);
            changed |= ImGui.Checkbox("Show Intercardinals##ImGui", ref config.ShowInterCardinals);
            changed |= ImGui.Checkbox("Hide all icons##ImGui", ref config.ShowOnlyCardinals);
            if (ImGui.IsItemHovered())
            {
                ImGui.BeginTooltip();
                ImGui.PushTextWrapPos(ImGui.GetFontSize() * 25.0f);
                ImGui.TextUnformatted("Except Cardinals & Intercardinals, if enabled.");
                ImGui.PopTextWrapPos();
                ImGui.EndTooltip();
            }

            changed |= ImGuiHelper.DrawTreeCheckbox("Enable Centre Marker", ref config.ImGuiCompassEnableCenterMarker, () => {
                var changed = false;
                ImGui.SetNextItemWidth(35 * scale);
                changed |= ImGui.DragInt("Centre Marker Offset##ImGui",
                                         ref config.ImGuiCompassCentreMarkerOffset);
                changed |= ImGui.Checkbox("Flip Centre Marker##ImGui", ref config.ImGuiCompassFlipCentreMarker);
                return(changed);
            });

            changed |= ImGuiHelper.DrawTreeCheckbox("Enable Background", ref config.ImGuiCompassEnableBackground, DrawBackgroundConfig(config));

            changed |= ImGuiHelper.DrawTreeCheckbox("Show Weather Icon", ref config.ShowWeatherIcon, () => {
                var changed = false;
                changed    |= ImGui.Checkbox("Show Border##ImGuiCompass_WeatherIcon", ref config.ShowWeatherIconBorder);
                changed    |= ImGui.DragFloat2("Offset##ImGuiCompass_WeatherIcon", ref config.ImGuiCompassWeatherIconOffset, 1f);
                changed    |= ImGui.SliderFloat("Scale##ImGuiCompass_WeatherIcon", ref config.ImGuiCompassWeatherIconScale, 0.01f, 3f, "%.2f");
                return(changed);
            });

            changed |= ImGuiHelper.DrawTreeCheckbox("Show approx. Distance To Target", ref config.ShowDistanceToTarget, () => {
                var changed = false;
                changed    |= ImGui.DragFloat2("Offset##ImGuiCompass_DistanceToTarget", ref config.ImGuiCompassDistanceToTargetOffset, 1f);
                changed    |= ImGui.SliderFloat("Scale##ImGuiCompass_DistanceToTarget", ref config.ImGuiCompassDistanceToTargetScale, 0.01f, 3f, "%.2f");
                ImGui.InputText("Prefix##ImGuiCompass_DistanceToTarget",
                                ref config.DistanceToTargetPrefix, 99);
                changed |= ImGui.InputText("Suffix##ImGuiCompass_DistanceToTarget",
                                           ref config.DistanceToTargetSuffix, 99);
                changed |= ImGui.ColorEdit4("Colour##ImGuiCompass_DistanceToTarget", ref config.ImGuiCompassDistanceToTargetColour);
                changed |= ImGui.Checkbox("Prioritise MouseOver Target",
                                          ref config.ImGuiCompassDistanceToTargetMouseOverPrio);
                return(changed);
            });

            changed |= ImGuiHelper.DrawTreeCheckbox("Use Map instead of Minimap as source##ImGui",
                                                    ref config.UseAreaMapAsSource,
                                                    () => {
                var changed = false;
                changed    |= ImGui.DragFloat("Max Distance##ImGui_AreaMap", ref config.AreaMapMaxDistance, 10f, 80f, 2000f, "%.f",
                                              ImGuiSliderFlags.AlwaysClamp);
                changed |= ImGui.SliderFloat("Minimum Scale Factor##ImGuiCompass_AreaMap", ref config.ImGuiCompassMinimumIconScaleFactorAreaMap, 0.00f, 1f,
                                             "%.2f", ImGuiSliderFlags.AlwaysClamp);
                return(changed);
            });
            ImGui.SameLine();
            ImGui.PushFont(UiBuilder.IconFont);
            ImGui.TextDisabled(FontAwesomeIcon.QuestionCircle.ToIconString());
            ImGui.PopFont();
            if (ImGui.IsItemHovered())
            {
                ImGui.BeginTooltip();
                ImGui.PushTextWrapPos(ImGui.GetFontSize() * 25.0f);
                ImGui.TextUnformatted(i18n.please_read_faq);
                ImGui.PopTextWrapPos();
                ImGui.EndTooltip();
            }

            ImGui.PopItemWidth();
            ImGui.Unindent();
        }

        ImGui.EndTabItem();
        return(changed);
    }