Files
node-metaverse/lib/classes/LLAnimationJoint.ts
2025-01-17 23:53:31 +00:00

73 lines
3.1 KiB
TypeScript

import { LLAnimationJointKeyFrame } from "./LLAnimationJointKeyFrame";
import type { BinaryReader } from './BinaryReader';
import { Utils } from "./Utils";
import { Vector3 } from './Vector3';
import type { BinaryWriter } from './BinaryWriter';
export class LLAnimationJoint
{
public name: string;
public priority: number;
public rotationKeyframeCount: number;
public rotationKeyframes: LLAnimationJointKeyFrame[] = [];
public positionKeyframeCount: number;
public positionKeyframes: LLAnimationJointKeyFrame[] = [];
public readFromBuffer(buf: BinaryReader, inPoint: number, outPoint: number): void
{
this.name = buf.readCString();
this.priority = buf.readInt32LE();
this.rotationKeyframeCount = buf.readInt32LE();
for (let frameNum = 0; frameNum < this.rotationKeyframeCount; frameNum++)
{
const jointKF = new LLAnimationJointKeyFrame();
jointKF.time = Utils.UInt16ToFloat(buf.readUInt16LE(), inPoint, outPoint);
const x = Utils.UInt16ToFloat(buf.readUInt16LE(), -1.0, 1.0);
const y = Utils.UInt16ToFloat(buf.readUInt16LE(), -1.0, 1.0);
const z = Utils.UInt16ToFloat(buf.readUInt16LE(), -1.0, 1.0);
jointKF.transform = new Vector3([x, y, z]);
this.rotationKeyframes.push(jointKF);
}
this.positionKeyframeCount = buf.readInt32LE();
for (let frameNum = 0; frameNum < this.positionKeyframeCount; frameNum++)
{
const jointKF = new LLAnimationJointKeyFrame();
jointKF.time = Utils.UInt16ToFloat(buf.readUInt16LE(), inPoint, outPoint);
const x = Utils.UInt16ToFloat(buf.readUInt16LE(), -1.0, 1.0);
const y = Utils.UInt16ToFloat(buf.readUInt16LE(), -1.0, 1.0);
const z = Utils.UInt16ToFloat(buf.readUInt16LE(), -1.0, 1.0);
jointKF.transform = new Vector3([x, y, z]);
this.positionKeyframes.push(jointKF);
}
}
public writeToBuffer(writer: BinaryWriter, inPoint: number, outPoint: number): void
{
writer.writeCString(this.name);
writer.writeInt32LE(this.priority);
writer.writeInt32LE(this.rotationKeyframeCount);
for (const keyframe of this.rotationKeyframes)
{
writer.writeUInt16LE(Utils.FloatToUInt16(keyframe.time, inPoint, outPoint));
writer.writeUInt16LE(Utils.FloatToUInt16(keyframe.transform.x, -1.0, 1.0));
writer.writeUInt16LE(Utils.FloatToUInt16(keyframe.transform.y, -1.0, 1.0));
writer.writeUInt16LE(Utils.FloatToUInt16(keyframe.transform.z, -1.0, 1.0));
}
writer.writeInt32LE(this.positionKeyframeCount);
for (const keyframe of this.positionKeyframes)
{
writer.writeUInt16LE(Utils.FloatToUInt16(keyframe.time, inPoint, outPoint));
writer.writeUInt16LE(Utils.FloatToUInt16(keyframe.transform.x, -1.0, 1.0));
writer.writeUInt16LE(Utils.FloatToUInt16(keyframe.transform.y, -1.0, 1.0));
writer.writeUInt16LE(Utils.FloatToUInt16(keyframe.transform.z, -1.0, 1.0));
}
}
}