// arm.js — arm_l / arm_r 两条手臂轨道动作。 // // 几何标定(踩坑换来的,照搬保留):人物面向一个方向,故左右臂朝「同一屏幕方向」收, // arm_l 与 arm_r 用相同旋转量(非镜像)—— pocket / raise / wave / punch 均如此, // 双手同动时两臂平行。arm_l 在屏幕左、正角指向左;arm_r 在屏幕右、负角指向右。 /** @type {Record} */ 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 }], }, }, }