Releases: adofaiex/JipperKeyViewer
Releases · adofaiex/JipperKeyViewer
Release list
1.7.0
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/#RRGGBBAAhex paste/typing, auto-parsed to UnityColor. 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:
LoadProfilenow createsnew ProfileData()beforeFromJsonOverwrite— prevents fields from the previously loaded profile leaking into the newly loaded one. - Profile size not applied after switch:
ResetKeyViewer()now re-appliesKeyViewerSizeObjectlocalScale 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=trueno longer creates avaluetext 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
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
+/Enterkeys 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.cfgby 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
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
Build Date: 2026-07-07
🚀 Features
- Key Font Size: New
KeyFontSizeslider (8–72) replaces hardcodedfontSizeMax=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, adjustPressAnimationScale(0.5–0.95), and optionallyEnablePressAnimationOnRainso rain drops animate together. Visuals wrapper isolates scaling from rain containers. - Per-Key Ghost Rain Color: New
PerKeyGhostRainColorarray 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;
ShareRainContainernow 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
AddQuadtoDrawRainQuad— follows the top-edge gradient fade along with main rain and outline. - 24K back sequence: Corrected
BackSequence24to 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
SafeEnsurehelper;InitPerKeyColorsrain color loop usesfootBase.
🧹 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/outlineImagechild objects on Rain withSetupShadow/SetupOutlinemethods. 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.sortingOrder:
FixRainContainerSortOrder()已删除——导致雨滴覆盖父级按键层级。同时移除 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
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
StandardKeyWidththat 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/3sliders 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.Lengthwas checking loop index instead ofbackSequence[i]. Corrected guard. - 24K third row rain not showing:
IsRainEnabledForKeycapped at index 20, blocking indices 20-23. Changed tokeyIndex < 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 callResetFootKeyViewer(). - 24K foot key limit removed: MaxKeySlots=40 allows 14K/16K foot keys in 24K mode (indices 24-39).
- Crash on settings load:
InitPerKeyColorscalledFootKeyBasebeforeSettingswas assigned, causing NullReferenceException. Replaced withMaxKeySlotsconstant.
🧹 Refactor
- Rain container sharing:
ApplyRainContainerSharing()/ShareRainContainer()redirects back-rowkey.rainto front row's RainLine.UpdateRainContainerPositionsusesHashSet<RectTransform>dedup. - Dynamic foot key base:
FootKeyBaseproperty replaces hardcoded 20 throughout the codebase (24 for 24K, 20 otherwise). - MaxKeySlots=40: All key arrays (
Keys,Count,keyPressTimes,lastPerKeyKps) useMaxKeySlots. Per-key color arrays useMaxKeySlots + 2.KeyIndexreturnsKeys.Length/+1for KPS/Total. All hardcoded 36/37/38/20 boundaries removed. - HasThirdRow property: Replaces
style == Key20checks 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/3、GhostRainSpeedRow1/2/3、GhostRainWidthRow1/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) - 设置加载崩溃:
InitPerKeyColors在Settings未赋值时调用FootKeyBase导致 NullReferenceException。改用MaxKeySlots常量
🧹 重构
- 雨滴容器共享:
ApplyRainContainerSharing()/ShareRainContainer()将后排key.rain重指向前排容器。UpdateRainContainerPositions用HashSet<RectTransform>去重 - 动态脚键基线:
FootKeyBase属性替代全库硬编码 20(24K 为 24,其余 20)。17 处脚键索引同步更新 - MaxKeySlots=40:所有键位数组(
Keys、Count、keyPressTimes、lastPerKeyKps)使用MaxKeySlots。每键颜色数组使用MaxKeySlots + 2。KeyIndex返回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
Build Date: 2026-07-01
v1.6.2
🚀 Features
- Per-row rain start height:
RainStartYRow1/2/3sliders replace hardcoded container Y (−223/−169/−115), live preview on slider drag viaUpdateRainContainerPositions() - Per-row ghost rain start height:
GhostRainStartYRow1/2/3absolute 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/3sliders (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:
LoadProfileusedFromJsonOverwriteon existingSettings.Data— new fields missing from old profile JSONs kept their value from the previous profile, behaving as global. Fixed by resettingSettings.Data = new ProfileData()before overwrite. - Ghost rain invisible:
RainGraphicalways enabled for ghost rain, empty mesh (0 verts) with both shadow/outline off interfered with childghostImage. Fixed: only enablegraphicwhen shadow or outline active. - Ghost rain start Y trail size:
startYwas mixed into trail length calculation (FinalSize), making ghost drops appear with an initial trail. Separatedy(elapsed → size) fromdropY = startY + y(→ position). - Rain invisible on first press:
RainSystem.PreWarmPoolcreated 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
>=0instead of==t.
🔧 Performance
- Zero-allocation KPS/Count display:
NumBuffer.Formatwith pre-allocatedchar[32]+TMP_Text.SetText(buf, offset, length)eliminates per-frameToStringallocations - Queue pre-allocation:
PressTimes(256) and per-key KPS queues (32) pre-allocated - Idle skip:
_hasKeyPressActivityflag skipsProcessPerKeyKpsInUpdateloop when no keys pressed
🧹 Refactor
- Profile system:
KeyViewerSettingssplit intoProfileData(all config) + meta wrapper. Multi-profile create/switch/rename/delete - GUI refactor: Extracted
FloatSliderField/DrawFoldoutButton; splitDrawSettingsWindowinto 10+ standalone section methods - RainSystem refactor:
UpdateEffectssplit intoSyncCachedSpeeds/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
FontStyleFlagssupport (Bold/Italic/etc.)
Full Changelog: 1.6.1...v1.6.2
v1.6.2-pre.1
Build Date: 2026-06-09
v1.6.1.1
🚀 Features
- Per-row rain width: New
RainWidthRow1/2/3sliders (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.PreWarmPoolcreated 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
>=0instead of==t, causing incorrect expanded-state tracking
🔧 Performance
- Zero-allocation KPS/Count display:
NumBuffer.Formatwith pre-allocatedchar[32]+TMP_Text.SetText(buf, offset, length)eliminates per-frameToStringstring allocations - Queue pre-allocation:
PressTimes(256) and per-key KPS queues (32) pre-allocated to avoid mid-game queue growth allocations - Idle skip:
_hasKeyPressActivityflag skipsProcessPerKeyKpsInUpdateloop when no keys have been pressed recently
🧹 Refactor
- Profile system:
KeyViewerSettingssplit intoProfileData(all config) + meta wrapper (Version/CurrentProfile/ProfileNames/Language). Multi-profile create/switch/rename/delete, v2→v3 auto-migration - GUI refactor: Extracted
FloatSliderField/DrawFoldoutButton/DrawFoldoutItemButtonto eliminate repetition; splitDrawSettingsWindowinto 10+ standalone section methods - RainSystem refactor:
UpdateEffectssplit intoSyncCachedSpeeds/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
FontStyleFlagssupport (Bold/Italic/etc.)
Full Changelog: 1.6.1...v1.6.2-pre.1
1.6.1
Build Date: 2026-06-03
v1.6.1
🚀 Features
- Custom
RainGraphicreplacesImagefor normal rain — lighter rendering (solid/gradient quad, 4 verts, no texture sampling) - Ghost rain now correctly renders the
GhostRain.pngsprite (childImage+ 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
Imagetiling — negligible overhead (low frequency)
🧹 Misc
- Removed dead code (unused
Initoverloads, pool methods, staleghostSprite) - Bumped version to 1.6.1
Full Changelog: 1.6.0...1.6.1
1.6.0
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
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