@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 2.23 kB
JavaScript
import{path as e}from"../../core/path.js";import{Quat as n}from"../../core/math/quat.js";import{Vec3 as t}from"../../core/math/vec3.js";import{Http as s,http as o}from"../../platform/net/http.js";import{Animation as a,Node as r,Key as i}from"../../scene/animation/animation.js";import{AnimEvents as l}from"../anim/evaluator/anim-events.js";import{GlbParser as m}from"../parsers/glb-parser.js";import{ResourceHandler as p}from"./handler.js";class d extends p{constructor(e){super(e,"animation"),this.device=e.graphicsDevice,this.assets=e.assets}load(n,t,a){"string"==typeof n&&(n={load:n,original:n});const r={retry:this.maxRetries>0,maxRetries:this.maxRetries};(n.load.startsWith("blob:")||n.load.startsWith("data:"))&&(".glb"===e.getExtension(n.original).toLowerCase()?r.responseType=s.ResponseType.ARRAY_BUFFER:r.responseType=s.ResponseType.JSON),o.get(n.load,r,((s,o)=>{var r;s?t(`Error loading animation resource: ${n.original} [${s}]`):".glb"===e.getExtension(n.original).toLowerCase()?m.parse("filename.glb","",o,this.device,this.assets,null!=(r=null==a?void 0:a.options)?r:{},((e,n)=>{if(e)t(e);else{var s;const e=n.animations;if(null!=a&&null!=(s=a.data)&&s.events)for(let n=0;n<e.length;n++)e[n].events=new l(Object.values(a.data.events));n.destroy(),t(null,e)}})):t(null,this[`_parseAnimationV${o.animation.version}`](o))}))}open(e,n,t){return n}_parseAnimationV3(e){const s=e.animation,o=new a;o.name=s.name,o.duration=s.duration;for(let e=0;e<s.nodes.length;e++){const a=new r,l=s.nodes[e];a._name=l.name;for(let e=0;e<l.keys.length;e++){const s=l.keys[e],o=s.time,r=s.pos,m=s.rot,p=s.scale,d=new t(r[0],r[1],r[2]),u=(new n).setFromEulerAngles(m[0],m[1],m[2]),c=new t(p[0],p[1],p[2]),h=new i(o,d,u,c);a._keys.push(h)}o.addNode(a)}return o}_parseAnimationV4(e){const s=e.animation,o=new a;o.name=s.name,o.duration=s.duration;for(let e=0;e<s.nodes.length;e++){const a=new r,l=s.nodes[e];a._name=l.name;const m=l.defaults.p,p=l.defaults.r,d=l.defaults.s;for(let e=0;e<l.keys.length;e++){const s=l.keys[e],o=s.t,r=m||s.p,u=p||s.r,c=d||s.s,h=new t(r[0],r[1],r[2]),f=(new n).setFromEulerAngles(u[0],u[1],u[2]),g=new t(c[0],c[1],c[2]),w=new i(o,h,f,g);a._keys.push(w)}o.addNode(a)}return o}}export{d as AnimationHandler};