Skip to content

Releases: adofaiex/JipperKeyViewer

1.7.0

Choose a tag to compare

@github-actions github-actions released this 12 Aug 04:02

Build Date: 2026-08-12

v1.7.0

🚀 Features

  • Hide KPS/Total Label: New toggle that hides the "KPS"/"Total" label text and centers the value in the middle of the box, updating every frame. Only shown for non-flat layouts (10K/12K/20K standard mode).
  • Stacked KPS/Total display: New "Stacked" toggle, only available when Centered is enabled. Label on top (compact font), value on bottom, both stacked inside the box.
  • Settings UI multi-tab refactor: Settings window split into 6 tabs — General, Layout, Display, Rain, Keys, Colors — with a permanent top bar for master toggles. Each tab's content lives in its own partial class file for cleaner organization and easier maintenance. Current tab index persisted to settings for cross-session recall.
  • Hex color input: Color picker fields now accept #RRGGBB / #RRGGBBAA hex paste/typing, auto-parsed to Unity Color. Input focus no longer resets on redraw; each channel input has a unique control name.
  • Foot key text centered: Foot key text is now centered in the key box instead of pinned to the top.

🐛 Bug Fixes

  • Profile data leak on switch: LoadProfile now creates new ProfileData() before FromJsonOverwrite — prevents fields from the previously loaded profile leaking into the newly loaded one.
  • Profile size not applied after switch: ResetKeyViewer() now re-applies KeyViewerSizeObject localScale at the end, so a profile's Size setting isn't overridden by the previous profile's slider value.
  • Centered text stuck after switching layouts: Turning centering on for one layout and switching to another now correctly restores the normal label/number layout.
  • Skip count update when main key count is hidden: HideMainKeyCount=true no longer creates a value text object or tries to update it.
  • Full keyboard KPS/Total toggle survives layout switch: Switching away from and back to the full keyboard no longer loses the KPS/Total show/hide state.

🔧 Performance

  • Smoother settings access and reworked rain-drop object pool (larger, no leftover drops).

🚀 新功能

  • 隐藏 KPS/Total 标签:新增「隐藏 KPS/Total 标签」开关。开启后 KPS/Total 框的 "KPS"/"Total" 文字消失,数值居中显示在框中间,每帧实时更新。仅非扁平(10K/12K/20K 标准模式)布局显示该开关。
  • KPS/Total 堆叠显示:新增「KPS/Total 上下堆叠」开关,仅在居中模式开启时可用。标签在上方(紧凑字号)、数值在下方,两者在框内上下堆叠互不遮挡。
  • 设置界面多标签页重构:设置窗口拆分为「常规」「布局」「显示」「雨线」「按键」「颜色」六个标签页,顶部常驻主开关;各标签页内容拆分为独立 partial 类文件,界面更整洁、代码更易维护。当前标签页索引持久化到配置,跨会话记忆。
  • 颜色选择器支持十六进制输入:颜色字段现在可以直接粘贴或输入 #RRGGBB / #RRGGBBAA,自动解析为 Unity 颜色。输入框获得焦点时不再被重置,每个通道有独立的控件名。
  • 脚键文本居中显示:脚键文字不再贴顶,改为整框居中显示,视觉更均衡。

🐛 Bug 修复

  • Profile 切换后数据残留:切换 Profile 时先用 new ProfileData() 清空旧数据,再 FromJsonOverwrite,避免旧 Profile 的字段泄露到新 Profile。
  • 切换 Profile 后尺寸不生效ResetKeyViewer() 末尾重新应用 KeyViewerSizeObject 的缩放,防止 Profile 的 Size 配置被之前的缩放值覆盖。
  • 切换布局后居中文本不恢复:在某个布局开启居中后切到别的布局,现在能正确恢复成正常的标签/数值布局。
  • 隐藏主键计数时跳过计数更新逻辑HideMainKeyCount 为 true 时不再创建 value 文本,也不会尝试更新它。
  • 全键盘布局切换后 KPS/Total 状态保持:切换主键布局后全键盘 KPS/Total 的显示/隐藏状态不再丢失。

🔧 性能

  • 配置访问更流畅,雨滴对象池优化。

Full Changelog: 1.6.5...1.7.0

1.6.5

Choose a tag to compare

@github-actions github-actions released this 19 Jul 11:04

Build Date: 2026-07-19

🚀 Features

  • 108-key full keyboard layout: New layout option that shows a complete physical QWERTY keyboard (with numpad). Keys are evenly spaced with a consistent 6px gap, the number pad hugs the main block, and the tall Numpad + / Enter keys span two rows. No foot keys, per-key colors, or ghost keys in this mode.
  • Dedicated KPS / Total for the full keyboard: The full keyboard has its own "Show KPS / Total" toggle, plus separate position controls and a size slider (40–400px). A "Full Keyboard Unified Color" option lets KPS/Total share the keyboard's background, outline, and text colors.
  • Move the whole keyboard freely: The custom-position sliders now move the entire 108-key block. Drag the X/Y sliders to pin it to any screen edge (left/right/top/bottom); KPS/Total keep their own independent position and are not dragged along.
  • Center the KPS / Total text: New "Center KPS / Total Text" option. On flat (side-by-side) KPS/Total boxes it merges the label and number into one centered line that re-centers as the number grows (e.g. KPS 123). Stacked (top/bottom) layouts keep the label above the number and hide this toggle.
  • Cleaner full-keyboard settings: Unrelated toggles (hide main count, per-key KPS, streamer mode) are hidden in full-keyboard mode, and the KPS/Total controls get their own collapsible section above the color settings.
  • Rebind the settings hotkey in-game (MelonLoader): A new "Settings Hotkey" row in the settings window lets you click the button and press any key to rebind the hotkey that opens/closes the UI. No more editing MelonPreferences.cfg by hand.

🐛 Bug Fixes

  • Crash when enabling custom position on the full keyboard: Enabling custom position no longer throws an error on the 108-key layout.
  • Stray foot keys on the full keyboard: Toggling custom position no longer makes foot-key controls or phantom keys appear in full-keyboard mode.
  • Centered text stuck after switching layouts: Turning centering on for one layout and switching to another now correctly restores the normal label/number layout.

🔧 Performance

  • Smoother settings access and a reworked rain-drop object pool (larger, no leftover drops); slightly larger internal queues for key-press timing.

🚀 新功能

  • 108 键全键盘布局:新增一种完整物理键盘布局(含小键盘)。按键间距统一为 6px,数字键盘紧贴主键区,小键盘的 +/Enter 高键跨两行。该模式下无脚键、无每键配色、无鬼键。
  • 全键盘专属 KPS/Total:全键盘拥有独立的「显示 KPS/Total」开关,外加独立的位置控制和尺寸滑块(40–400px)。「全键盘统一色」选项让 KPS/Total 共用键盘的背景、描边、文字颜色。
  • 整块键盘自由移动:自定义位置滑块现在能整体平移 108 键。拖动 X/Y 即可把键盘贴到任意屏幕边缘(左/右/上/下);KPS/Total 保持各自独立位置,不会被一起拖动。
  • KPS/Total 文本居中:新增「KPS/Total 文本居中」选项。对左右扁平的 KPS/Total 框,它会把标签和数值合并为一行居中显示,且数值变长时整行重新居中(如 KPS 123);上下堆叠的布局保持标签在上、数值在下,并隐藏该开关。
  • 全键盘设置更干净:全键盘模式下隐藏无关的开关(隐藏主区域计数、每键 KPS、主播模式),KPS/Total 控制独立成折叠区块,位于颜色设置上方。
  • 游戏内重绑设置热键(MelonLoader):设置窗口新增「设置界面热键」一行,点击按钮后按任意键即可重绑开关设置界面的热键,无需再手动改 MelonPreferences.cfg

🐛 Bug 修复

  • 全键盘开启自定义位置崩溃:在 108 键布局下开启自定义位置不再报错。
  • 全键盘误显脚键:开启自定义位置时,全键盘模式不再出现脚键控件或残留按键。
  • 切换布局后居中文本不恢复:在某个布局开启居中后切到别的布局,现在能正确恢复成正常的标签/数值布局。

🔧 性能

  • 设置访问更流畅,雨滴对象池重写(容量更大、无残留雨滴);按键计时的内部队列略有扩容。

Full Changelog: 1.6.4.1...1.6.5

1.6.4.1

Choose a tag to compare

@github-actions github-actions released this 11 Jul 11:50

Build Date: 2026-07-11

🚀 新功能

  • 双加载器支持:同时适配 UnityModManager 和 MelonLoader。核心 DLL 加载器无关,通过 IModLoader 接口桥接。新增 4 个薄层加载器项目
  • MelonLoader 设置界面:按默认热键 F1 唤出设置窗口(可自定义),窗口大小随分辨率自适应
  • MelonLoader 热键可配置:编辑 UserData/MelonPreferences.cfg[JipperKeyViewer] 节的 Hotkey 字段
  • [MelonGame] 已移除:可在任何 MelonLoader 游戏下加载(TMP 支持为前提)
  • 按键字号滑块:新增 KeyFontSize 滑块(8–72),替换硬编码 fontSizeMax=20。Tab(⇥)/Space(␣) 直接拉大字号即可,不再需要 <size> 标签

🧹 重构

  • Main.cs:加载器无关化,Init(IModLoader) + EnableNow() 替代原有 UMM 绑定
  • ModLoader.cs:新增 IModLoader 接口 + Loader 静态访问类
  • KeyViewerResources.cs/I18n.cs 等:所有 Main.Mod.* 引用替换为 Loader.*
  • Info.json:入口指向 JipperKeyViewer.Loader.UMM.dll
  • Build 流程:6 项目构建 + 打包含两种加载器 + 两种变体

Full Changelog: 1.6.4...1.6.4.1

1.6.4

Choose a tag to compare

@github-actions github-actions released this 07 Jul 08:45

Build Date: 2026-07-07

🚀 Features

  • Key Font Size: New KeyFontSize slider (8–72) replaces hardcoded fontSizeMax=20. Adjust key label text size live — fixes Tab (⇥) and Space (␣) rendering too small without <size> tag hacks.
  • Key Press Animation: Keys shrink smoothly on press, return on release (80ms lerp coroutine). Toggle EnablePressAnimation, adjust PressAnimationScale (0.5–0.95), and optionally EnablePressAnimationOnRain so rain drops animate together. Visuals wrapper isolates scaling from rain containers.
  • Per-Key Ghost Rain Color: New PerKeyGhostRainColor array with dedicated color picker in per-key color editor — set each key's ghost rain color independently from normal rain.

🐛 Bug Fixes

  • 14K back row alignment: Corrected to match "16K cut off outermost columns" — BackSequence14={13,9,8,10,11,12} with keys centered at columns 1–6 (x=54–324). Per-key counts stay at consistent screen positions when switching between layouts.
  • Rain container no-sharing: Each key keeps its own RainLine; ShareRainContainer now only adjusts X offset and width for front-column alignment instead of destroying/redirecting. Eliminates Z-order issues between rows without Canvas sorting hacks.
  • Canvas.sortingOrder removed: FixRainContainerSortOrder() removed — caused rain containers to override parent-key layering. GraphicRaycaster also removed from RainLine (unnecessary).
  • RainGraphic shadow gradient: Shadow quad changed from solid-color AddQuad to DrawRainQuad — follows the top-edge gradient fade along with main rain and outline.
  • 24K back sequence: Corrected BackSequence24 to match row 2/row 3 layout order.
  • AutoAssignRainbowColors: Refactored to assign colors per-layout key count (+ foot keys + KPS/Total) instead of sequential index.
  • Animation null-guard: Added if (animTarget == null) yield break; in coroutine to prevent NRE on destroyed keys.
  • NRE on load: Color array initialization uses SafeEnsure helper; InitPerKeyColors rain color loop uses footBase.

🧹 Refactor

  • FootKeyBase fixed to 24: Removed conditional (was Key24 ? 24 : 20). V3→V4 migration shifts foot key data from indices 20 → 24 for all profiles.
  • Image-based rain shadow/outline: Added shadowImage/outlineImage child objects on Rain with SetupShadow/SetupOutline methods. Gradient texture synced to all three images.
  • EnsureColorArray/SafeEnsure: Unified helper replaces per-field null checks for color arrays.
  • PerKeyTypeOrder extended: Includes type 7 (ghost rain color) for main keys.
  • Settings.Version bumped: 3 → 4 for foot base migration.

🚀 新功能

  • 按键字号滑块:新增 KeyFontSize 滑块(8–72),替换硬编码 fontSizeMax=20。Tab(⇥)/Space(␣) 直接拉大字号即可,不再需要 <size> 标签
  • 按键按下动画:按下时按键平滑缩小,松手恢复(80ms lerp 协程)。EnablePressAnimation 开关、PressAnimationScale 缩放比例(0.5–0.95)、EnablePressAnimationOnRain 控制雨滴是否跟随。Visuals 包裹层隔离缩放,雨滴容器不受影响
  • 每键鬼键雨滴颜色:新增 PerKeyGhostRainColor 颜色数组,每键颜色编辑器中增加鬼键雨滴色块,独立于普通雨滴颜色

🐛 Bug 修复

  • 14K 后排按键位置修正:按"16K 裁掉最外两列"重排,BackSequence14={13,9,8,10,11,12},键位居中于 columns 1–6(x=54–324)。切换布局时各键计数位置不变
  • 雨滴容器不共享:每个按键保留自己的 RainLine,ShareRainContainer 只调 X 偏移和宽度对齐前列,不再销毁/重定向容器。消除排间 Z-order 问题,不再需要 Canvas.sortingOrder hack
  • 移除 Canvas.sortingOrderFixRainContainerSortOrder() 已删除——导致雨滴覆盖父级按键层级。同时移除 RainLine 上不必要的 GraphicRaycaster
  • 阴影跟随顶部渐变RainGraphic 阴影从 AddQuad 纯色块改为 DrawRainQuad,和描边、主体一样受渐变影响
  • 24K 后排序列修正BackSequence24 修正为正确 layout 顺序
  • AutoAssignRainbowColors 重构:按当前布局键数 + 脚键 + KPS/Total 分配颜色,不再用顺序索引
  • 动画协程 null 保护:添加 if (animTarget == null) yield break;,防止销毁后的按键空引用崩溃
  • 加载时 NRE 修复:颜色数组改用 SafeEnsure 初始化,InitPerKeyColors 雨滴颜色循环使用 footBase

🧹 重构

  • FootKeyBase 固定为 24:移除条件判断(原 Key24 ? 24 : 20)。V3→V4 迁移将脚键数据从 index 20 移动到 24(含多 Profile 迁移)
  • Image 版雨滴阴影/描边:Rain 对象添加 shadowImage/outlineImage 子对象 + SetupShadow/SetupOutline 方法,渐变纹理同步到三个 Image
  • EnsureColorArray/SafeEnsure:统一辅助函数替代逐个字段的空值检查
  • PerKeyTypeOrder 扩展:主键增加 type 7(鬼键雨滴颜色)
  • Settings.Version 升级:3 → 4,支持脚键基地迁移

Full Changelog: 1.6.3...1.6.4

1.6.3

Choose a tag to compare

@github-actions github-actions released this 05 Jul 13:43

Build Date: 2026-07-05

🚀 Features

  • 24K layout: New 24-key layout (8+8+8) — three full rows of 8 keys each at 50px, all 54px apart. Foot keys use indices 24-39, allowing up to 16K foot key selection. Ghost key bindings and third-row rain settings fully supported. Layout tuned with frontY=375, KPS/Total at y=221, 6px gap between rows and KPS (matching 16K standard).
  • Standard Key Width mode: Toggle StandardKeyWidth that converts mixed-width back rows (12K key 8/10 from 77→50px, 10K 129→50px, 20K third row 77→50px) with widened KPS/Total filling the ends — matching KorenResourcePack's uniform layout style.
  • Ghost rain independent height/speed/width: New GhostRainHeightRow1/2/3, GhostRainSpeedRow1/2/3, GhostRainWidthRow1/2/3 sliders under the ghost rain section.

🐛 Bug Fixes

  • 12K/10K grid rain position: Back row keys with non-standard widths (12K key 8/10=77px, 10K key 8/9=129px) now share the front row's RainLine (key 9→2, 8→3, 10→4, 11→5 for 12K; 8→3, 9→4 for 10K). Rain drops align with the front column instead of centering within wide keys.
  • Rain render order with shared containers: Back row drops hidden behind front row drops in shared containers. Fixed by SetSiblingIndex((row-1)*2 + isGhost) — front=0, middle=2, third=4, ghost=base+1.
  • 14K layout jump: Switching from 16K to 14K dropped the overlay by 21px. All 14K Y values normalized to 16K (frontY 299→320, backY 245→266, KPS 199→220).
  • 8K layout too high with DownLocation: 8K repositioned as "16K minus second row" — frontY=266 (16K's back row position), KPS/Total y=220 (16K KPS position). DownLocation now aligns KPS at y=20 matching 16K.
  • 20K third row ghost key UI reversed: Ghost key buttons showed 16,17,18,19 but visual layout is 17,16,18,19. Now uses BackSequence20[8..12].
  • Custom position foldout conflated with toggle: Foldout was acting as on/off switch. Now separate expand state CustomPositionExpanded + internal enable toggle.
  • DrawMainKeyRows third row loop guard: i < keyCodes.Length was checking loop index instead of backSequence[i]. Corrected guard.
  • 24K third row rain not showing: IsRainEnabledForKey capped at index 20, blocking indices 20-23. Changed to keyIndex < FootKeyBase.
  • 24K KPS/Total overlapping third row: KPS/Total at y=165 overlapped with third row (y=232). Raised to y=221 with 6px gap.
  • 24K layout switching stale keys: Switching out of 24K left Keys[20-23] with stale 24K main key objects. Fixed ChangeKeyViewer() to also call ResetFootKeyViewer().
  • 24K foot key limit removed: MaxKeySlots=40 allows 14K/16K foot keys in 24K mode (indices 24-39).
  • Crash on settings load: InitPerKeyColors called FootKeyBase before Settings was assigned, causing NullReferenceException. Replaced with MaxKeySlots constant.

🧹 Refactor

  • Rain container sharing: ApplyRainContainerSharing() / ShareRainContainer() redirects back-row key.rain to front row's RainLine. UpdateRainContainerPositions uses HashSet<RectTransform> dedup.
  • Dynamic foot key base: FootKeyBase property replaces hardcoded 20 throughout the codebase (24 for 24K, 20 otherwise).
  • MaxKeySlots=40: All key arrays (Keys, Count, keyPressTimes, lastPerKeyKps) use MaxKeySlots. Per-key color arrays use MaxKeySlots + 2. KeyIndex returns Keys.Length/+1 for KPS/Total. All hardcoded 36/37/38/20 boundaries removed.
  • HasThirdRow property: Replaces style == Key20 checks in 18 locations across rain settings, shadow/outline, and ghost rain sections. Covers both 20K and 24K.

🚀 新功能

  • 24K 布局:新增 24 键布局(8+8+8),三排完整的 50px 等距排列。脚键索引扩展至 24-39,24K 下最多可选 16K 脚键。完整支持鬼键绑定、第三排雨滴/鬼雨设置。布局参数 frontY=375、KPS/Total 在 y=221,行间间隙 6px(与 16K 一致)
  • 标准按键宽度模式:开关 StandardKeyWidth 将宽窄混排的后排统为 50px(12K 宽键 77→50、10K 129→50、20K 第三排 77→50),KPS/Total 拉宽填平两端
  • 鬼雨独立高度/速度/宽度:新增 GhostRainHeightRow1/2/3GhostRainSpeedRow1/2/3GhostRainWidthRow1/2/3 滑条,鬼雨参数完全独立于普通雨

🐛 Bug 修复

  • 12K/10K 雨滴位置:非标准宽度后排键(12K key8/10=77px, 10K key8/9=129px)共享前排 RainLine 容器(12K: 9→2,8→3,10→4,11→5;10K: 8→3,9→4),雨滴与前列对齐
  • 雨滴渲染顺序:共享容器内后排雨滴被前排遮挡。SetSiblingIndex((row-1)*2 + isGhost) 固定渲染层级:前排=0、中排=2、第三排=4
  • 14K 布局跳变:16K 切 14K 时整体下沉 21px。14K 全部 Y 值归一到 16K(frontY 299→320, 后排 245→266, KPS 199→220)
  • 8K 开启放下面后偏高:8K 重新定位为"16K 去掉第二排"——frontY=266(16K 第二排行)、KPS/Total y=220(16K KPS 位置),放下面后 KPS 也在 y=20 与 16K 对齐
  • 20K 第三排鬼键 UI 顺序反了:按钮显示 16,17,18,19,但实际键位 17,16,18,19。改用 BackSequence20[8..12]
  • 自定义位置折叠误当开关:折叠按钮同时控制开关,无法展开查看滑条而保持功能开启。拆为独立折叠状态 + 内部勾选框
  • DrawMainKeyRows 第三排越界判断:循环条件 i < keyCodes.Length 检查的是循环下标而非 backSequence[i]
  • 24K 第三排雨滴不触发IsRainEnabledForKey 上限为 index 20,阻断 20-23。改为 keyIndex < FootKeyBase
  • 24K KPS/Total 与第三排重叠:KPS 在 y=165 与第三排(y=232)重叠。上调至 y=221,间距 6px
  • 24K 切出后残留旧对象:切换回非 24K 布局时 Keys[20-23] 残留旧 24K 主键对象。ChangeKeyViewer() 同时调用 ResetFootKeyViewer() 重建脚键
  • 24K 脚键限制解除MaxKeySlots=40 允许 24K 选择 14K/16K 脚键(索引 24-39)
  • 设置加载崩溃InitPerKeyColorsSettings 未赋值时调用 FootKeyBase 导致 NullReferenceException。改用 MaxKeySlots 常量

🧹 重构

  • 雨滴容器共享ApplyRainContainerSharing() / ShareRainContainer() 将后排 key.rain 重指向前排容器。UpdateRainContainerPositionsHashSet<RectTransform> 去重
  • 动态脚键基线FootKeyBase 属性替代全库硬编码 20(24K 为 24,其余 20)。17 处脚键索引同步更新
  • MaxKeySlots=40:所有键位数组(KeysCountkeyPressTimeslastPerKeyKps)使用 MaxKeySlots。每键颜色数组使用 MaxKeySlots + 2KeyIndex 返回 Keys.Length/+1 代表 KPS/Total。移除全库硬编码 36/37/38/20
  • HasThirdRow 属性:替代 18 处 style == Key20 判断,覆盖 20K 和 24K

Full Changelog: v1.6.2...1.6.3

v1.6.2

Choose a tag to compare

@github-actions github-actions released this 01 Jul 11:27

Build Date: 2026-07-01

v1.6.2

🚀 Features

  • Per-row rain start height: RainStartYRow1/2/3 sliders replace hardcoded container Y (−223/−169/−115), live preview on slider drag via UpdateRainContainerPositions()
  • Per-row ghost rain start height: GhostRainStartYRow1/2/3 absolute position sliders, independent from normal rain.
  • Per-row rain shadow: Independent shadow toggle, color, X/Y offset for each row (Row1/2/3), separate settings for ghost rain
  • Per-row rain outline: Independent outline toggle, color, width for each row (Row1/2/3), separate settings for ghost rain
  • Per-row rain width: New RainWidthRow1/2/3 sliders (10–200px), each row's rain width adjustable independently
  • Rain speed/height range extended: Slider ceiling raised from 1000→2000, text field upper bound fully removed
  • Korean (ko) language added

🐛 Bug Fixes

  • Profile load field leak: LoadProfile used FromJsonOverwrite on existing Settings.Data — new fields missing from old profile JSONs kept their value from the previous profile, behaving as global. Fixed by resetting Settings.Data = new ProfileData() before overwrite.
  • Ghost rain invisible: RainGraphic always enabled for ghost rain, empty mesh (0 verts) with both shadow/outline off interfered with child ghostImage. Fixed: only enable graphic when shadow or outline active.
  • Ghost rain start Y trail size: startY was mixed into trail length calculation (FinalSize), making ghost drops appear with an initial trail. Separated y (elapsed → size) from dropY = startY + y (→ position).
  • Rain invisible on first press: RainSystem.PreWarmPool created objects without a valid Canvas. Removed pre-warming entirely.
  • Color foldout resetting per-item state every frame: Foldout expanded state was overwritten each frame.
  • KPS/Total sub-foldout comparison: Used >=0 instead of ==t.

🔧 Performance

  • Zero-allocation KPS/Count display: NumBuffer.Format with pre-allocated char[32] + TMP_Text.SetText(buf, offset, length) eliminates per-frame ToString allocations
  • Queue pre-allocation: PressTimes (256) and per-key KPS queues (32) pre-allocated
  • Idle skip: _hasKeyPressActivity flag skips ProcessPerKeyKpsInUpdate loop when no keys pressed

🧹 Refactor

  • Profile system: KeyViewerSettings split into ProfileData (all config) + meta wrapper. Multi-profile create/switch/rename/delete
  • GUI refactor: Extracted FloatSliderField / DrawFoldoutButton; split DrawSettingsWindow into 10+ standalone section methods
  • RainSystem refactor: UpdateEffects split into SyncCachedSpeeds / UpdateSingleRainDrop / ApplyRainTransforms / UpdateFadeOut / UpdateTrailEdge
  • AddQuad signature simplified: 7 params → 4 params (VertexHelper, Rect, Color, Color)
  • I18n rewrite: Custom JSON parser replaced with JsonUtility.FromJson<LangFile>
  • FileBased font style parity: Added FontStyleFlags support (Bold/Italic/etc.)

Full Changelog: 1.6.1...v1.6.2

v1.6.2-pre.1

v1.6.2-pre.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Jun 13:00

Build Date: 2026-06-09

v1.6.1.1

🚀 Features

  • Per-row rain width: New RainWidthRow1/2/3 sliders (10–200px), each row's rain width adjustable independently
  • Rain speed/height range extended: Slider ceiling raised from 1000→2000, text field upper bound fully removed
  • Korean (ko) language added

🐛 Bug Fixes

  • Rain invisible on first press: RainSystem.PreWarmPool created objects without a valid Canvas, leaving CanvasRenderer/mesh uninitialized. Removed pre-warming entirely — Rain objects are lightweight enough that it's unnecessary
  • Color foldout resetting per-item state every frame: Foldout expanded state was overwritten each frame, preventing sub-items from staying open/closed
  • KPS/Total sub-foldout comparison: Used >=0 instead of ==t, causing incorrect expanded-state tracking

🔧 Performance

  • Zero-allocation KPS/Count display: NumBuffer.Format with pre-allocated char[32] + TMP_Text.SetText(buf, offset, length) eliminates per-frame ToString string allocations
  • Queue pre-allocation: PressTimes (256) and per-key KPS queues (32) pre-allocated to avoid mid-game queue growth allocations
  • Idle skip: _hasKeyPressActivity flag skips ProcessPerKeyKpsInUpdate loop when no keys have been pressed recently

🧹 Refactor

  • Profile system: KeyViewerSettings split into ProfileData (all config) + meta wrapper (Version/CurrentProfile/ProfileNames/Language). Multi-profile create/switch/rename/delete, v2→v3 auto-migration
  • GUI refactor: Extracted FloatSliderField / DrawFoldoutButton / DrawFoldoutItemButton to eliminate repetition; split DrawSettingsWindow into 10+ standalone section methods
  • RainSystem refactor: UpdateEffects split into SyncCachedSpeeds / UpdateSingleRainDrop / ApplyRainTransforms / UpdateFadeOut / UpdateTrailEdge; unified rain/ghost rain color retrieval
  • AddQuad signature simplified: 7 params → 4 params (VertexHelper, Rect, Color, Color)
  • I18n rewrite: Custom JSON parser replaced with JsonUtility.FromJson<LangFile>
  • FileBased font style parity: Added FontStyleFlags support (Bold/Italic/etc.)

Full Changelog: 1.6.1...v1.6.2-pre.1

1.6.1

Choose a tag to compare

@github-actions github-actions released this 03 Jun 15:20

Build Date: 2026-06-03

v1.6.1

🚀 Features

  • Custom RainGraphic replaces Image for normal rain — lighter rendering (solid/gradient quad, 4 verts, no texture sampling)
  • Ghost rain now correctly renders the GhostRain.png sprite (child Image + Tiled mode)
  • Per-row ghost rain color customization (GhostRainColor / GhostRainColor2 / GhostRainColor3)
  • Edge fade slider changed from percentage to pixels (1–200px)

🐛 Bug Fixes

  • Ghost rain sprite was loaded but never used for rendering — now displays correctly
  • Release fade and edge fade now work together without conflict

🔧 Performance

  • Normal rain: 4 verts / 2 tris, no texture sampling — lighter than old Image
  • Ghost rain: child Image tiling — negligible overhead (low frequency)

🧹 Misc

  • Removed dead code (unused Init overloads, pool methods, stale ghostSprite)
  • Bumped version to 1.6.1

Full Changelog: 1.6.0...1.6.1

1.6.0

Choose a tag to compare

@github-actions github-actions released this 26 May 16:14

Build Date: 2026-05-26
v1.6.0
Features

  • Added foldout font style list with all TMP styles
  • Added font style toggles (Bold, Italic, Underline, Strikethrough)
  • Added per-key KPS display
  • Added per-key count reset with independent KPS/Total colors
  • Added Streamer Mode with i18n updates and rain system cleanup
  • Added Ghost Rain feature (secondary keys that trigger rain only)
  • Added 14K main key layout (8+6)
    Fixes
  • Fixed count text missing fontStyle at creation
  • Fixed 'S' displaying as lowercase for strikethrough
  • Fixed strikethrough toggle label lowercase 's'
  • Fixed count/KPS display initialization on startup and layout change
  • Fixed explicit bottomY in LayoutDesc, removed fragile extras-1 assumption
  • Fixed IRainSettings reference removal from FileBased .csproj
  • Fixed rain effect updates isolated to child canvas to avoid full UI rebuild
  • Fixed input processing moved to KeyViewerInput with focus guard and performance tweaks
    Refactor & Performance
  • Refactored RainSystem: removed dead abstraction and unnecessary queue indirection
  • Refactored KeyViewerLayout: replaced 6 duplicated Initialize methods with data-driven layout
  • Removed unused fields
  • Isolated rain updates to child canvas for performance
    CI/CD & Documentation
  • Updated release workflow to commit version bumps back to repo
  • Updated dist Info.json only, skip protected-branch push
  • Checkout master before version bump to avoid detached HEAD
  • Matched v-prefixed tags in release workflow
  • Auto-detected prerelease from version suffix (-pre/-rc/-alpha/-beta/-dev)
  • Upgraded upload-artifact to v6 (Node.js 24)
  • Upgraded actions/checkout to v6 and setup-msbuild to v3 (Node.js 24)
  • Forced Node.js 24 for actions runner
  • Rebuilt Unity AssetBundles for 6000 and 2022 versions
  • Removed copy-libs.ps1 as DLLs already in libs/
  • Updated README for v1.5.1, two variants, CI/CD
  • Added PR template

Full Changelog: 1.5.1...1.6.0

1.5.2-pre

1.5.2-pre Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 24 May 18:21

Full Changelog: 1.5.1...v1.5.2-pre

JipperKeyViewer v1.5.2-pre

🚀 Performance

  • Rain effect updates isolated to child canvas, avoiding full UI rebuild
  • RainSystem: removed dead IRainSettings abstraction, eliminated unnecessary queue indirection
  • RainSystem: O(1) HashSet + swap-remove optimization for active key tracking

🔨 Refactoring

  • KeyViewerLayout: replaced 6 duplicated Initialize methods with data-driven LayoutDesc system (-76 lines)
  • Layout bottom edge is now an explicit field, not an implicit assumption

🔧 CI/CD

  • Release workflow auto-detects prerelease from version suffix (-pre/-rc/-alpha/-beta/-dev)
  • Tag pattern now matches both v-prefixed and non-prefixed tags
  • Node.js 24 support for all CI actions

📦 Assets

  • Rebuild Unity AssetBundles (6000 + 2022)

Build Date: 2026-05-24