骨骼字段语义命名(实测证据)+ 逐类反编译避免大小写撞名
- anchors.tsv:按用户实测把这批字段钉死 —— Z/V=x/y、F=rotation、Code/SourceFile=scaleX/scaleY、StackMapTable/LineNumberTable=shearX/shearY (证据:编辑器里 Rotate=341.456 / Translate(-168,-116) / Scale(0.8799,0.572) / Shear(-52.221,-28.63) 与 Inspector 显示值一一对应);D/B/L/I/S/C = 静止姿态组(推断);D:LGP;=skeleton、D:LGp;=parent、B:Color=color。 - names.tsv 合并后 208 条,Renamer 改名 2867 处成员引用。 - src-named 改为**每个类单独反编译、用载荷类名当文件名**:CFR 直接输出会把 GP.java/Gp.java 这类只差大小写的类写到同一个文件(macOS 文件系统不区分大小写),必须逐类产出。 - 注:CFR 对同名成员的自动改名(var_xxx 风格)不要开(--renamedupmembers),否则会盖掉我们的语义名。
This commit is contained in:
1 parent
d9ea449b64
commit
9a6913e610
3 files changed
+61
-1
No files matched your search
@@ -27,3 +27,25 @@ KP B (I)V setSelectedIndex
|
||||
# ---- 场景模型:Gp = 骨骼;依据 gp_2.java 的 toString()/D(String,boolean)V ----
|
||||
Gp D Ljava/lang/String; name
|
||||
Gp D (Ljava/lang/String;Z)V setName
|
||||
# ---- 场景模型:Gp = 骨骼的变换字段 ----
|
||||
# 证据:用户在编辑器里把 root 转到 341.456 / 平移(-168,-116) / 缩放(0.8799,0.572) / 斜切(-52.221,-28.63),
|
||||
# 面板 Inspector 同步显示 Z=-168.00009 V=-116.0 F=33.676704 Code=0.8799178 SourceFile=0.5720396
|
||||
# StackMapTable=-52.220505 LineNumberTable=-28.629883 —— 一一对应,故确定语义。
|
||||
Gp Z F x
|
||||
Gp V F y
|
||||
Gp F F rotation
|
||||
Gp Code F scaleX
|
||||
Gp SourceFile F scaleY
|
||||
Gp StackMapTable F shearX
|
||||
Gp LineNumberTable F shearY
|
||||
# 静止姿态(rest pose)那一组:值与默认姿态吻合(0,0,0,1,1,0),且未改动时与上面那组相等 —— 推断,留注释待复核
|
||||
Gp D F setupX
|
||||
Gp B F setupY
|
||||
Gp L F setupRotation
|
||||
Gp I F setupScaleX
|
||||
Gp S F setupScaleY
|
||||
Gp C F setupShear
|
||||
# 引用类字段:skeleton 由 hd.D(set, bone.D)+GP.D(LGp;) 的用法确定;parent 由创建骨骼时 bone.D=parent 确定
|
||||
Gp D LGP; skeleton
|
||||
Gp D LGp; parent
|
||||
Gp B Lcom/badlogic/gdx/graphics/Color; color
|
||||
|
+17
-1
@@ -1,7 +1,23 @@
|
||||
# 合并后的名字映射表:先由 MapMethods 指纹自动生成,再用手动锚点覆盖
|
||||
# 合并后的名字映射表:MapMethods(gdx-1.11.0) 指纹自动生成 + 手动锚点覆盖
|
||||
# owner name desc newName
|
||||
Gp B F setupY
|
||||
Gp B Lcom/badlogic/gdx/graphics/Color; color
|
||||
Gp C F setupShear
|
||||
Gp Code F scaleX
|
||||
Gp D (Ljava/lang/String;Z)V setName
|
||||
Gp D F setupX
|
||||
Gp D LGP; skeleton
|
||||
Gp D LGp; parent
|
||||
Gp D Ljava/lang/String; name
|
||||
Gp F F rotation
|
||||
Gp I F setupScaleX
|
||||
Gp L F setupRotation
|
||||
Gp LineNumberTable F shearY
|
||||
Gp S F setupScaleY
|
||||
Gp SourceFile F scaleY
|
||||
Gp StackMapTable F shearX
|
||||
Gp V F y
|
||||
Gp Z F x
|
||||
KP B ()Ljava/lang/String; getSelected
|
||||
KP B (I)V setSelectedIndex
|
||||
KP B (Ljava/lang/String;)V setSelected
|
||||
|
||||
|
@@ -36,6 +36,7 @@ public final class ObjectPanel {
|
||||
ClassLoader loader;
|
||||
Object skin;
|
||||
Object listTable;
|
||||
Object listScroll;
|
||||
Object status;
|
||||
Object nameField;
|
||||
List<Object> objects = new ArrayList<Object>();
|
||||
@@ -61,6 +62,7 @@ public final class ObjectPanel {
|
||||
Object rows = tableClass.getConstructor().newInstance();
|
||||
state.listTable = tableClass.getConstructor().newInstance();
|
||||
Object scroll = scrollClass.getConstructor(actorClass, skinClass).newInstance(state.listTable, skin);
|
||||
state.listScroll = scroll;
|
||||
state.status = label(loader, skin, "Press Refresh to list scene objects.");
|
||||
state.nameField = fieldClass.getConstructor(String.class, skinClass)
|
||||
.newInstance("particle_bone", skin);
|
||||
@@ -217,6 +219,7 @@ public final class ObjectPanel {
|
||||
setStatus(state, "List build failed: " + error);
|
||||
return;
|
||||
}
|
||||
invalidateList(state);
|
||||
setStatus(state, objects.size() + " scene objects"
|
||||
+ (state.target == null ? "" : "; target = " + SceneObjects.kind(state.target)
|
||||
+ " " + SceneObjects.nameOf(state.target)));
|
||||
@@ -331,6 +334,24 @@ public final class ObjectPanel {
|
||||
return simple;
|
||||
}
|
||||
|
||||
/**
|
||||
* 列表内容变了以后,必须让 `Table` 与 `ScrollPane` 重新算一遍尺寸 ——
|
||||
* 否则 ScrollPane 里缓存的高度还是旧的,表现为"内容多了却不能滚"。
|
||||
* `b_()V` = `invalidate()`(来源:MapMethods 对 gdx-1.11.0 的指纹比对)。
|
||||
*/
|
||||
private static void invalidateList(final State state) {
|
||||
try {
|
||||
call(state.listTable, "b_", new Class<?>[0], void.class);
|
||||
} catch (Throwable ignored) {
|
||||
// 名字对不上就算了
|
||||
}
|
||||
try {
|
||||
call(state.listScroll, "b_", new Class<?>[0], void.class);
|
||||
} catch (Throwable ignored) {
|
||||
// 同上
|
||||
}
|
||||
}
|
||||
|
||||
/** 用纯文本行填列表区(行不可点)。 */
|
||||
private static void fillTextRows(final State state, List<String> lines) {
|
||||
try {
|
||||
@@ -344,6 +365,7 @@ public final class ObjectPanel {
|
||||
layoutCell(cell, Obf.CELL_LEFT);
|
||||
call(state.listTable, Obf.TABLE_ROW, new Class<?>[0], cellClass);
|
||||
}
|
||||
invalidateList(state);
|
||||
} catch (Throwable error) {
|
||||
System.err.println("[panel] inspector 填充失败: " + error);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user