Skip to content

[Bug] ModSetting中包含过多选项的Dropdown无法使用 #36

@KCFindstr

Description

@KCFindstr

模块范围

UI

严重程度

Broken feature(功能不可用)

发生了什么?

我在Mod Setting添加了一个约包含500个选项的DropDown(动态生成的列表以允许用户自主载入角色皮肤,所以有可能包含大量选项)。点击该DropDown时,没有出现下拉框,log中报错。

复现步骤

  1. 创建一个约500个选项的skinChoiceOptions,然后注册ModConfig:
    RitsuLibFramework.RegisterModSettings(modId, page => page
      .WithModDisplayName(ModSettingsText.LocString("settings_ui", "LINKURA_MOD.mod_title", "LinkuraMod"))
      .WithTitle(ModSettingsText.LocString("settings_ui", "LINKURA_MOD.settings_title", "LinkuraMod Settings"))
      .AddSection("skin", section => section
        .WithTitle(SettingsText("Skin"))
        .AddCustom(
          "kaho_skin_preview",
          SettingsText("Kaho Preview"),
          _ => CreateKahoSkinPreview())
        .AddChoice(
          "kaho_skin",
          SettingsText("Kaho Skin"),
          _kahoSkinBinding,
          skinChoiceOptions,
          presentation: ModSettingsChoicePresentation.Dropdown))
  1. 打开游戏进入模组配置UI,尝试点击这个DropDown

期望行为

DropDown正常显示并带有垂直滚动条

日志 / 堆栈

ERROR: System.ArgumentException: '0' cannot be greater than -23546.
   at System.Math.ThrowMinMaxException[T](T min, T max)
   at STS2RitsuLib.Settings.ModSettingsDropdownChoiceControl`1.LayoutDropdownInViewport() in /home/runner/work/STS2-RitsuLib/STS2-RitsuLib/Settings/ModSettingsUi/Controls/ModSettingsUiControls.cs:line 1499
   at STS2RitsuLib.Settings.ModSettingsDropdownChoiceControl`1.OpenDropdown() in /home/runner/work/STS2-RitsuLib/STS2-RitsuLib/Settings/ModSettingsUi/Controls/ModSettingsUiControls.cs:line 1214
   at STS2RitsuLib.Settings.ModSettingsDropdownChoiceControl`1.OnFacePressed() in /home/runner/work/STS2-RitsuLib/STS2-RitsuLib/Settings/ModSettingsUi/Controls/ModSettingsUiControls.cs:line 1156
   at Godot.Callable.<From>g__Trampoline|1_0(Object delegateObj, NativeVariantPtrArgs args, godot_variant& ret)
   at Godot.DelegateUtils.InvokeWithVariantArgs(IntPtr delegateGCHandle, Void* trampoline, godot_variant** args, Int32 argc, godot_variant* outRet)
   at: void Godot.NativeInterop.ExceptionUtils.LogException(System.Exception) (:0)
   C# backtrace (most recent call first):
       [0] void Godot.GD.PushError(string)
       [1] void Godot.NativeInterop.ExceptionUtils.LogException(System.Exception)
       [2] void Godot.DelegateUtils.InvokeWithVariantArgs(nint, System.Void*, Godot.NativeInterop.godot_variant**, int, Godot.NativeInterop.godot_variant*)

RitsuLib 版本

0.2.29

运行环境

Windows 11, STS2 0.103.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/uiUser interface, layout, controls, or visual behavior.priority/p1High priority regression or high-impact work.severity/brokenA feature path is effectively unusable.status/needs-triageNeeds maintainer or analyzer triage.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions