reze-engine 0.9.5 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -4
- package/dist/animation.d.ts +26 -13
- package/dist/animation.d.ts.map +1 -1
- package/dist/animation.js +95 -35
- package/dist/engine.d.ts +0 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +1 -10
- package/dist/ik-solver.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/model.d.ts +8 -11
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +55 -38
- package/package.json +1 -1
- package/src/animation.ts +124 -40
- package/src/engine.ts +34 -44
- package/src/ik-solver.ts +7 -7
- package/src/index.ts +9 -5
- package/src/model.ts +64 -42
package/README.md
CHANGED
|
@@ -71,13 +71,15 @@ engine.runRenderLoop()
|
|
|
71
71
|
| Method | Description |
|
|
72
72
|
|--------|-------------|
|
|
73
73
|
| `model.loadAnimation(name, url)` | Load VMD animation |
|
|
74
|
-
| `model.
|
|
75
|
-
| `model.
|
|
74
|
+
| `model.loadAnimation(name, clip)` | Load/replace animation clip directly |
|
|
75
|
+
| `model.show(name)` | Set pose at time 0 (resets bones and morphs first) |
|
|
76
|
+
| `model.play(name?)` | Play animation (queued if busy; named play resets bones/morphs first) |
|
|
77
|
+
| `model.play(name, { priority?, loop? })` | Priority-aware play; `loop` wraps at end (`0` default/lowest priority) |
|
|
76
78
|
| `model.pause()` | Pause playback |
|
|
77
79
|
| `model.stop()` | Stop playback |
|
|
78
80
|
| `model.seek(time)` | Seek to time |
|
|
79
|
-
| `model.getAnimationProgress()` | `{ current, duration, percentage, animationName }` |
|
|
80
|
-
| `model.
|
|
81
|
+
| `model.getAnimationProgress()` | `{ current, duration, percentage, animationName, looping, playing, paused }` — `current`/`duration` are seconds |
|
|
82
|
+
| `model.getAnimationClip(name)` | Get loaded clip by name |
|
|
81
83
|
| `model.rotateBones(rotations, ms?)` | Tween bone rotations |
|
|
82
84
|
| `model.moveBones(translations, ms?)` | Tween bone translations |
|
|
83
85
|
| `model.setMorphWeight(name, weight, ms?)` | Tween morph weight |
|
|
@@ -85,6 +87,8 @@ engine.runRenderLoop()
|
|
|
85
87
|
| `model.resetAllMorphs()` | Reset all morph weights |
|
|
86
88
|
| `model.getBoneWorldPosition(name)` | World position of bone |
|
|
87
89
|
|
|
90
|
+
`AnimationClip` is frame-based: `frameCount` is the last keyframe frame index, keyframes store `frame`. Engine playback uses fixed 30 FPS. Looping is controlled via `play(name, { loop: true })`, not on the clip.
|
|
91
|
+
|
|
88
92
|
### Engine Options
|
|
89
93
|
|
|
90
94
|
```javascript
|
package/dist/animation.d.ts
CHANGED
|
@@ -15,31 +15,46 @@ export interface BoneKeyframe {
|
|
|
15
15
|
rotation: Quat;
|
|
16
16
|
translation: Vec3;
|
|
17
17
|
interpolation: BoneInterpolation;
|
|
18
|
-
time: number;
|
|
19
18
|
}
|
|
20
19
|
export interface MorphKeyframe {
|
|
21
20
|
morphName: string;
|
|
22
21
|
frame: number;
|
|
23
22
|
weight: number;
|
|
24
|
-
time: number;
|
|
25
23
|
}
|
|
26
24
|
export interface AnimationClip {
|
|
27
25
|
boneTracks: Map<string, BoneKeyframe[]>;
|
|
28
26
|
morphTracks: Map<string, MorphKeyframe[]>;
|
|
29
|
-
|
|
27
|
+
frameCount: number;
|
|
28
|
+
}
|
|
29
|
+
export interface AnimationPlayOptions {
|
|
30
|
+
priority?: number;
|
|
30
31
|
loop?: boolean;
|
|
31
32
|
}
|
|
33
|
+
/** Wall-clock playback progress; `current`/`duration` are seconds (clip span uses `AnimationClip.frameCount`, not `duration`). */
|
|
34
|
+
export interface AnimationProgress {
|
|
35
|
+
animationName: string | null;
|
|
36
|
+
current: number;
|
|
37
|
+
duration: number;
|
|
38
|
+
percentage: number;
|
|
39
|
+
looping: boolean;
|
|
40
|
+
/** True while the timeline is advancing (not idle at end, not paused). */
|
|
41
|
+
playing: boolean;
|
|
42
|
+
paused: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare const FPS = 30;
|
|
32
45
|
export declare class AnimationState {
|
|
33
46
|
private animations;
|
|
34
47
|
private currentAnimationName;
|
|
35
|
-
private
|
|
48
|
+
private currentFrame;
|
|
49
|
+
private currentPriority;
|
|
50
|
+
private currentLoop;
|
|
36
51
|
private isPlaying;
|
|
37
52
|
private isPaused;
|
|
38
|
-
private
|
|
53
|
+
private nextAnimation;
|
|
39
54
|
private onEnd;
|
|
40
55
|
loadAnimation(name: string, clip: AnimationClip): void;
|
|
41
56
|
removeAnimation(name: string): void;
|
|
42
|
-
play(name: string): boolean;
|
|
57
|
+
play(name: string, options?: AnimationPlayOptions): boolean;
|
|
43
58
|
play(): void;
|
|
44
59
|
update(deltaTime: number): {
|
|
45
60
|
ended: boolean;
|
|
@@ -47,17 +62,15 @@ export declare class AnimationState {
|
|
|
47
62
|
};
|
|
48
63
|
pause(): void;
|
|
49
64
|
stop(): void;
|
|
50
|
-
seek(
|
|
65
|
+
seek(seconds: number): void;
|
|
51
66
|
getCurrentClip(): AnimationClip | null;
|
|
67
|
+
getAnimationClip(name: string): AnimationClip | null;
|
|
52
68
|
getCurrentAnimation(): string | null;
|
|
53
69
|
getCurrentTime(): number;
|
|
70
|
+
getCurrentFrame(): number;
|
|
71
|
+
/** Clip length in seconds (`frameCount / FPS`). */
|
|
54
72
|
getDuration(): number;
|
|
55
|
-
getProgress():
|
|
56
|
-
animationName: string | null;
|
|
57
|
-
current: number;
|
|
58
|
-
duration: number;
|
|
59
|
-
percentage: number;
|
|
60
|
-
};
|
|
73
|
+
getProgress(): AnimationProgress;
|
|
61
74
|
getAnimationNames(): string[];
|
|
62
75
|
hasAnimation(name: string): boolean;
|
|
63
76
|
show(name: string): void;
|
package/dist/animation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAEnC,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,YAAY,EAAE,YAAY,EAAE,CAAA;IAC5B,YAAY,EAAE,YAAY,EAAE,CAAA;IAC5B,YAAY,EAAE,YAAY,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,IAAI,CAAA;IACd,WAAW,EAAE,IAAI,CAAA;IACjB,aAAa,EAAE,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../src/animation.ts"],"names":[],"mappings":"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"}
|
package/dist/animation.js
CHANGED
|
@@ -1,30 +1,39 @@
|
|
|
1
|
-
|
|
1
|
+
export const FPS = 30;
|
|
2
|
+
// Priority-aware playback: higher priority preempts, otherwise latest request is queued.
|
|
2
3
|
export class AnimationState {
|
|
3
4
|
constructor() {
|
|
4
5
|
this.animations = new Map();
|
|
5
6
|
this.currentAnimationName = null;
|
|
6
|
-
this.
|
|
7
|
+
this.currentFrame = 0;
|
|
8
|
+
this.currentPriority = 0;
|
|
9
|
+
this.currentLoop = false;
|
|
7
10
|
this.isPlaying = false;
|
|
8
11
|
this.isPaused = false;
|
|
9
|
-
this.
|
|
12
|
+
this.nextAnimation = null;
|
|
10
13
|
this.onEnd = null;
|
|
11
14
|
}
|
|
12
15
|
loadAnimation(name, clip) {
|
|
13
|
-
this.animations.set(name,
|
|
16
|
+
this.animations.set(name, {
|
|
17
|
+
boneTracks: clip.boneTracks,
|
|
18
|
+
morphTracks: clip.morphTracks,
|
|
19
|
+
frameCount: clip.frameCount,
|
|
20
|
+
});
|
|
14
21
|
}
|
|
15
22
|
removeAnimation(name) {
|
|
16
23
|
this.animations.delete(name);
|
|
17
24
|
if (this.currentAnimationName === name) {
|
|
18
25
|
this.currentAnimationName = null;
|
|
19
|
-
this.
|
|
26
|
+
this.currentFrame = 0;
|
|
27
|
+
this.currentPriority = 0;
|
|
28
|
+
this.currentLoop = false;
|
|
20
29
|
this.isPlaying = false;
|
|
21
|
-
this.
|
|
30
|
+
this.nextAnimation = this.nextAnimation?.name === name ? null : this.nextAnimation;
|
|
22
31
|
}
|
|
23
|
-
else if (this.
|
|
24
|
-
this.
|
|
32
|
+
else if (this.nextAnimation?.name === name) {
|
|
33
|
+
this.nextAnimation = null;
|
|
25
34
|
}
|
|
26
35
|
}
|
|
27
|
-
play(name) {
|
|
36
|
+
play(name, options) {
|
|
28
37
|
if (name === undefined) {
|
|
29
38
|
if (this.currentAnimationName && this.animations.has(this.currentAnimationName)) {
|
|
30
39
|
this.isPaused = false;
|
|
@@ -34,15 +43,37 @@ export class AnimationState {
|
|
|
34
43
|
}
|
|
35
44
|
if (!this.animations.has(name))
|
|
36
45
|
return false;
|
|
46
|
+
const priority = options?.priority ?? 0;
|
|
47
|
+
const loop = options?.loop ?? false;
|
|
48
|
+
if (this.currentAnimationName === name) {
|
|
49
|
+
this.currentFrame = 0;
|
|
50
|
+
this.currentPriority = priority;
|
|
51
|
+
this.currentLoop = loop;
|
|
52
|
+
this.isPlaying = true;
|
|
53
|
+
this.isPaused = false;
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
37
56
|
if (this.isPlaying && !this.isPaused) {
|
|
38
|
-
this.
|
|
57
|
+
if (priority > this.currentPriority) {
|
|
58
|
+
this.currentAnimationName = name;
|
|
59
|
+
this.currentFrame = 0;
|
|
60
|
+
this.currentPriority = priority;
|
|
61
|
+
this.currentLoop = loop;
|
|
62
|
+
this.isPlaying = true;
|
|
63
|
+
this.isPaused = false;
|
|
64
|
+
this.nextAnimation = null;
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
this.nextAnimation = { name, priority, loop };
|
|
39
68
|
return true;
|
|
40
69
|
}
|
|
41
70
|
this.currentAnimationName = name;
|
|
42
|
-
this.
|
|
71
|
+
this.currentFrame = 0;
|
|
72
|
+
this.currentPriority = priority;
|
|
73
|
+
this.currentLoop = loop;
|
|
43
74
|
this.isPlaying = true;
|
|
44
75
|
this.isPaused = false;
|
|
45
|
-
this.
|
|
76
|
+
this.nextAnimation = null;
|
|
46
77
|
return true;
|
|
47
78
|
}
|
|
48
79
|
update(deltaTime) {
|
|
@@ -52,21 +83,28 @@ export class AnimationState {
|
|
|
52
83
|
const clip = this.animations.get(this.currentAnimationName);
|
|
53
84
|
if (!clip)
|
|
54
85
|
return { ended: false, animationName: this.currentAnimationName };
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
86
|
+
const frameCount = clip.frameCount;
|
|
87
|
+
if (frameCount <= 0 || !Number.isFinite(frameCount)) {
|
|
88
|
+
return { ended: false, animationName: this.currentAnimationName };
|
|
89
|
+
}
|
|
90
|
+
this.currentFrame += deltaTime * FPS;
|
|
91
|
+
if (this.currentFrame >= frameCount) {
|
|
92
|
+
if (this.currentLoop) {
|
|
93
|
+
while (this.currentFrame >= frameCount) {
|
|
94
|
+
this.currentFrame -= frameCount;
|
|
95
|
+
}
|
|
61
96
|
return { ended: false, animationName: this.currentAnimationName };
|
|
62
97
|
}
|
|
98
|
+
this.currentFrame = frameCount;
|
|
63
99
|
const finishedName = this.currentAnimationName;
|
|
64
100
|
this.onEnd?.(finishedName);
|
|
65
|
-
if (this.
|
|
66
|
-
const next = this.
|
|
67
|
-
this.
|
|
68
|
-
this.currentAnimationName = next;
|
|
69
|
-
this.
|
|
101
|
+
if (this.nextAnimation !== null) {
|
|
102
|
+
const next = this.nextAnimation;
|
|
103
|
+
this.nextAnimation = null;
|
|
104
|
+
this.currentAnimationName = next.name;
|
|
105
|
+
this.currentFrame = 0;
|
|
106
|
+
this.currentPriority = next.priority;
|
|
107
|
+
this.currentLoop = next.loop;
|
|
70
108
|
this.isPlaying = true;
|
|
71
109
|
this.isPaused = false;
|
|
72
110
|
return { ended: true, animationName: finishedName };
|
|
@@ -82,37 +120,57 @@ export class AnimationState {
|
|
|
82
120
|
stop() {
|
|
83
121
|
this.isPlaying = false;
|
|
84
122
|
this.isPaused = false;
|
|
85
|
-
this.
|
|
86
|
-
this.
|
|
123
|
+
this.currentFrame = 0;
|
|
124
|
+
this.currentPriority = 0;
|
|
125
|
+
this.currentLoop = false;
|
|
126
|
+
this.nextAnimation = null;
|
|
87
127
|
}
|
|
88
|
-
|
|
128
|
+
// Seek by absolute timeline seconds, not frame index.
|
|
129
|
+
seek(seconds) {
|
|
89
130
|
const clip = this.getCurrentClip();
|
|
90
|
-
if (!clip)
|
|
131
|
+
if (!clip || clip.frameCount <= 0 || !Number.isFinite(clip.frameCount))
|
|
91
132
|
return;
|
|
92
|
-
|
|
133
|
+
const targetFrame = seconds * FPS;
|
|
134
|
+
this.currentFrame = Math.max(0, Math.min(targetFrame, clip.frameCount));
|
|
93
135
|
}
|
|
94
136
|
getCurrentClip() {
|
|
95
137
|
return this.currentAnimationName !== null ? this.animations.get(this.currentAnimationName) ?? null : null;
|
|
96
138
|
}
|
|
139
|
+
getAnimationClip(name) {
|
|
140
|
+
return this.animations.get(name) ?? null;
|
|
141
|
+
}
|
|
97
142
|
getCurrentAnimation() {
|
|
98
143
|
return this.currentAnimationName;
|
|
99
144
|
}
|
|
100
145
|
getCurrentTime() {
|
|
101
|
-
|
|
146
|
+
const clip = this.getCurrentClip();
|
|
147
|
+
if (!clip)
|
|
148
|
+
return 0;
|
|
149
|
+
return this.currentFrame / FPS;
|
|
150
|
+
}
|
|
151
|
+
getCurrentFrame() {
|
|
152
|
+
return this.currentFrame;
|
|
102
153
|
}
|
|
154
|
+
/** Clip length in seconds (`frameCount / FPS`). */
|
|
103
155
|
getDuration() {
|
|
104
156
|
const clip = this.getCurrentClip();
|
|
105
|
-
|
|
157
|
+
if (!clip || clip.frameCount <= 0 || !Number.isFinite(clip.frameCount))
|
|
158
|
+
return 0;
|
|
159
|
+
return clip.frameCount / FPS;
|
|
106
160
|
}
|
|
107
161
|
getProgress() {
|
|
108
162
|
const clip = this.getCurrentClip();
|
|
109
|
-
const duration = clip ? clip.
|
|
110
|
-
const
|
|
163
|
+
const duration = clip && clip.frameCount > 0 ? clip.frameCount / FPS : 0;
|
|
164
|
+
const current = clip ? this.currentFrame / FPS : 0;
|
|
165
|
+
const percentage = duration > 0 ? (current / duration) * 100 : 0;
|
|
111
166
|
return {
|
|
112
167
|
animationName: this.currentAnimationName,
|
|
113
|
-
current
|
|
168
|
+
current,
|
|
114
169
|
duration,
|
|
115
170
|
percentage,
|
|
171
|
+
looping: this.currentLoop,
|
|
172
|
+
playing: this.isPlaying && !this.isPaused,
|
|
173
|
+
paused: this.isPaused,
|
|
116
174
|
};
|
|
117
175
|
}
|
|
118
176
|
getAnimationNames() {
|
|
@@ -125,10 +183,12 @@ export class AnimationState {
|
|
|
125
183
|
if (!this.animations.has(name))
|
|
126
184
|
return;
|
|
127
185
|
this.currentAnimationName = name;
|
|
128
|
-
this.
|
|
186
|
+
this.currentFrame = 0;
|
|
187
|
+
this.currentPriority = 0;
|
|
188
|
+
this.currentLoop = false;
|
|
129
189
|
this.isPlaying = false;
|
|
130
190
|
this.isPaused = false;
|
|
131
|
-
this.
|
|
191
|
+
this.nextAnimation = null;
|
|
132
192
|
}
|
|
133
193
|
setOnEnd(callback) {
|
|
134
194
|
this.onEnd = callback;
|
package/dist/engine.d.ts
CHANGED
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,IAAI,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAExD,MAAM,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAEpH,MAAM,MAAM,aAAa,GAAG;IAC1B,YAAY,CAAC,EAAE,IAAI,CAAA;IACnB,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,oBAAoB,CAAC,EAAE,IAAI,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;CAWlC,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;CAClB;AA2CD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.js
CHANGED
|
@@ -623,7 +623,7 @@ export class Engine {
|
|
|
623
623
|
// Screen-stable edgeline: extrusion ∝ camera distance (same idea as MMD viewers / babylon-mmd-style scaling)
|
|
624
624
|
let camDist = max(length(camera.viewPos - worldPos), 0.25);
|
|
625
625
|
let refDist = 30.0;
|
|
626
|
-
let edgeScale = 0.
|
|
626
|
+
let edgeScale = 0.025;
|
|
627
627
|
let expandedPos = worldPos + worldNormal * material.edgeSize * edgeScale * (camDist / refDist);
|
|
628
628
|
output.position = camera.projection * camera.view * vec4f(expandedPos, 1.0);
|
|
629
629
|
return output;
|
|
@@ -880,15 +880,6 @@ export class Engine {
|
|
|
880
880
|
this.lightData[3] = this.minSpecularIntensity; // ambientColor.w = minSpecularIntensity
|
|
881
881
|
this.updateLightBuffer();
|
|
882
882
|
}
|
|
883
|
-
clearLights() {
|
|
884
|
-
this.lightCount = 0;
|
|
885
|
-
// Clear all light data by setting intensity to 0
|
|
886
|
-
for (let i = 0; i < 4; i++) {
|
|
887
|
-
const baseIndex = 4 + i * 8;
|
|
888
|
-
this.lightData[baseIndex + 7] = 0; // color.w / intensity
|
|
889
|
-
}
|
|
890
|
-
this.updateLightBuffer();
|
|
891
|
-
}
|
|
892
883
|
addLight(direction, color, intensity = 1.0) {
|
|
893
884
|
if (this.lightCount >= 4)
|
|
894
885
|
return false;
|
package/dist/ik-solver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ik-solver.d.ts","sourceRoot":"","sources":["../src/ik-solver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,IAAI,EAAU,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG7D,MAAM,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;AAoE/E,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAS;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAuB;
|
|
1
|
+
{"version":3,"file":"ik-solver.d.ts","sourceRoot":"","sources":["../src/ik-solver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,IAAI,EAAU,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAG7D,MAAM,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;AAoE/E,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAS;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAuB;IAExD,MAAM,CAAC,KAAK,CACV,SAAS,EAAE,QAAQ,EAAE,EACrB,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,IAAI,EAAE,EACtB,iBAAiB,EAAE,IAAI,EAAE,EACzB,aAAa,EAAE,IAAI,EAAE,EACrB,WAAW,EAAE,WAAW,EAAE,EAC1B,iBAAiB,CAAC,EAAE,mBAAmB,GACtC,IAAI;IAMP,OAAO,CAAC,MAAM,CAAC,OAAO;IAoFtB,OAAO,CAAC,MAAM,CAAC,UAAU;IAqGzB,OAAO,CAAC,MAAM,CAAC,UAAU;IAYzB,OAAO,CAAC,MAAM,CAAC,WAAW;IAM1B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAKlC,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAmCjC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAQ/B,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAqBvC,OAAO,CAAC,MAAM,CAAC,4BAA4B;IAc3C,OAAO,CAAC,MAAM,CAAC,eAAe;IAS9B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAoCjC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { Engine, type EngineStats } from "./engine";
|
|
2
2
|
export { Model } from "./model";
|
|
3
3
|
export { Vec3, Quat, Mat4 } from "./math";
|
|
4
|
-
export {
|
|
4
|
+
export type { AnimationClip, AnimationPlayOptions, AnimationProgress, BoneKeyframe, MorphKeyframe, BoneInterpolation, ControlPoint, } from "./animation";
|
|
5
|
+
export { FPS } from "./animation";
|
|
5
6
|
export { Physics, type PhysicsOptions } from "./physics";
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACzC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACzC,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,YAAY,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/index.js
CHANGED
package/dist/model.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Mat4, Quat, Vec3 } from "./math";
|
|
2
2
|
import { Rigidbody, Joint } from "./physics";
|
|
3
|
-
import {
|
|
3
|
+
import { AnimationClip, AnimationPlayOptions, AnimationProgress } from "./animation";
|
|
4
4
|
export interface Texture {
|
|
5
5
|
path: string;
|
|
6
6
|
name: string;
|
|
@@ -145,26 +145,23 @@ export declare class Model {
|
|
|
145
145
|
setMorphWeight(name: string, weight: number, durationMs?: number): void;
|
|
146
146
|
private applyMorphs;
|
|
147
147
|
private buildClipFromVmdKeyFrames;
|
|
148
|
-
loadAnimation(animationName: string,
|
|
148
|
+
loadAnimation(animationName: string, source: string): Promise<void>;
|
|
149
|
+
loadAnimation(animationName: string, source: AnimationClip): void;
|
|
149
150
|
resetAllBones(): void;
|
|
150
151
|
resetAllMorphs(): void;
|
|
151
|
-
|
|
152
|
+
getAnimationClip(name: string): AnimationClip | null;
|
|
152
153
|
play(): void;
|
|
153
154
|
play(name: string): boolean;
|
|
155
|
+
play(name: string, options?: AnimationPlayOptions): boolean;
|
|
154
156
|
show(name: string): void;
|
|
155
157
|
playAnimation(): void;
|
|
156
158
|
pause(): void;
|
|
157
159
|
pauseAnimation(): void;
|
|
158
160
|
stop(): void;
|
|
159
161
|
stopAnimation(): void;
|
|
160
|
-
seek(
|
|
161
|
-
seekAnimation(
|
|
162
|
-
getAnimationProgress():
|
|
163
|
-
current: number;
|
|
164
|
-
duration: number;
|
|
165
|
-
percentage: number;
|
|
166
|
-
animationName: string | null;
|
|
167
|
-
};
|
|
162
|
+
seek(seconds: number): void;
|
|
163
|
+
seekAnimation(seconds: number): void;
|
|
164
|
+
getAnimationProgress(): AnimationProgress;
|
|
168
165
|
private static upperBound;
|
|
169
166
|
private findKeyframeIndex;
|
|
170
167
|
private applyPoseFromClip;
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAEzC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAG5C,OAAO,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|