arm.js
4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// arm.js — arm_l / arm_r 两条手臂轨道动作。
//
// 几何标定(踩坑换来的,照搬保留):人物面向一个方向,故左右臂朝「同一屏幕方向」收,
// arm_l 与 arm_r 用相同旋转量(非镜像)—— pocket / raise / wave / punch 均如此,
// 双手同动时两臂平行。arm_l 在屏幕左、正角指向左;arm_r 在屏幕右、负角指向右。
/** @type {Record<string, import('../types.js').AnimationClip>} */
export const ARM_CLIPS = {
// ---- 左臂(屏幕左)----
'arm_l.down': {
id: 'arm_l.down', track: 'arm_l', kind: 'pose', duration: 0,
bones: { upper_arm_l: [{ t: 0 }], lower_arm_l: [{ t: 0 }] },
},
// 插兜:两手一起收向朝向侧的胯兜。
'arm_l.pocket': {
id: 'arm_l.pocket', track: 'arm_l', kind: 'pose', duration: 0,
bones: { upper_arm_l: [{ t: 0, drot: -22 }], lower_arm_l: [{ t: 0, drot: 30 }] },
},
'arm_l.raise': {
id: 'arm_l.raise', track: 'arm_l', kind: 'pose', duration: 0,
bones: { upper_arm_l: [{ t: 0, drot: 158 }], lower_arm_l: [{ t: 0, drot: 6 }] },
},
// 指人分「指左/指右」:基准朝向下,指左=伸向屏幕左,指右=伸向屏幕右。
'arm_l.point_left': {
id: 'arm_l.point_left', track: 'arm_l', kind: 'pose', duration: 0,
bones: { upper_arm_l: [{ t: 0, drot: 80 }], lower_arm_l: [{ t: 0, drot: 8 }] },
},
'arm_l.point_right': {
id: 'arm_l.point_right', track: 'arm_l', kind: 'pose', duration: 0,
bones: { upper_arm_l: [{ t: 0, drot: -92 }], lower_arm_l: [{ t: 0, drot: -8 }] },
},
'arm_l.wave': {
id: 'arm_l.wave', track: 'arm_l', kind: 'loop', duration: 600,
bones: {
upper_arm_l: [{ t: 0, drot: 150 }, { t: 1, drot: 150 }],
lower_arm_l: [{ t: 0, drot: -22 }, { t: 0.5, drot: 24 }, { t: 1, drot: -22 }],
},
},
// 挥拳:预备(向后内带)→ 向行进/朝向方向水平前冲伸直 → 收回。左右臂同方向。
// 基准朝向(facing=right 状态)下出拳朝屏幕左(-x),与 leg.walk 行进方向一致;facing 镜像翻到另一侧。
'arm_l.punch': {
id: 'arm_l.punch', track: 'arm_l', kind: 'oneshot', duration: 460,
bones: {
upper_arm_l: [{ t: 0, drot: 0 }, { t: 0.2, drot: -18 }, { t: 0.5, drot: 80 }, { t: 0.64, drot: 80 }, { t: 1, drot: 0 }],
lower_arm_l: [{ t: 0, drot: 0 }, { t: 0.2, drot: -28 }, { t: 0.5, drot: 6 }, { t: 0.64, drot: 6 }, { t: 1, drot: 0 }],
},
},
// ---- 右臂(屏幕右)----
'arm_r.down': {
id: 'arm_r.down', track: 'arm_r', kind: 'pose', duration: 0,
bones: { upper_arm_r: [{ t: 0 }], lower_arm_r: [{ t: 0 }] },
},
'arm_r.pocket': {
id: 'arm_r.pocket', track: 'arm_r', kind: 'pose', duration: 0,
bones: { upper_arm_r: [{ t: 0, drot: -22 }], lower_arm_r: [{ t: 0, drot: 30 }] },
},
// 举手:与 arm_l.raise 相同旋转量(左右同方向,非镜像),双手同举时两臂平行。
'arm_r.raise': {
id: 'arm_r.raise', track: 'arm_r', kind: 'pose', duration: 0,
bones: { upper_arm_r: [{ t: 0, drot: 158 }], lower_arm_r: [{ t: 0, drot: 6 }] },
},
'arm_r.point_left': {
id: 'arm_r.point_left', track: 'arm_r', kind: 'pose', duration: 0,
bones: { upper_arm_r: [{ t: 0, drot: 92 }], lower_arm_r: [{ t: 0, drot: 8 }] },
},
'arm_r.point_right': {
id: 'arm_r.point_right', track: 'arm_r', kind: 'pose', duration: 0,
bones: { upper_arm_r: [{ t: 0, drot: -80 }], lower_arm_r: [{ t: 0, drot: -8 }] },
},
'arm_r.wave': {
id: 'arm_r.wave', track: 'arm_r', kind: 'loop', duration: 600,
bones: {
upper_arm_r: [{ t: 0, drot: 150 }, { t: 1, drot: 150 }],
lower_arm_r: [{ t: 0, drot: -22 }, { t: 0.5, drot: 24 }, { t: 1, drot: -22 }],
},
},
'arm_r.punch': {
id: 'arm_r.punch', track: 'arm_r', kind: 'oneshot', duration: 480,
bones: {
upper_arm_r: [{ t: 0, drot: 0 }, { t: 0.2, drot: -18 }, { t: 0.5, drot: 80 }, { t: 0.64, drot: 80 }, { t: 1, drot: 0 }],
lower_arm_r: [{ t: 0, drot: 0 }, { t: 0.2, drot: -28 }, { t: 0.5, drot: 6 }, { t: 0.64, drot: 6 }, { t: 1, drot: 0 }],
},
},
}