xushiting 3 tahun lalu
induk
melakukan
92e5573a2e
4 mengubah file dengan 856 tambahan dan 0 penghapusan
  1. 1 0
      dist/libs/nipplejs.min.js
  2. 839 0
      src/XSubSequence.js
  3. 5 0
      src/enum/GetStateTypes.js
  4. 11 0
      src/enum/SyncEventType.js

File diff ditekan karena terlalu besar
+ 1 - 0
dist/libs/nipplejs.min.js


+ 839 - 0
src/XSubSequence.js

@@ -0,0 +1,839 @@
+import {http2} from "./Http2.js"
+import {logger} from "./Logger.js"
+
+const DefaultUrlTransformer = async i=>typeof i != "string" ? (console.warn("url transformer error", i),
+i) : i.startsWith("blob:") ? i : http2.get({
+    url: i,
+    useIndexedDb: !0,
+    key: "url"
+})
+
+export default class XSubSequence {
+    constructor(e, t, r=DefaultUrlTransformer) {
+        E(this, "_scene");
+        E(this, "_meshGroups");
+        E(this, "_animGroup");
+        E(this, "_particleGroups");
+        E(this, "_materialGroups");
+        E(this, "_spriteGroups");
+        E(this, "_glowGroups");
+        E(this, "_highLightGroups");
+        E(this, "_endFrame");
+        E(this, "_centerNode");
+        E(this, "_rootDir");
+        E(this, "_abosoluteUrl");
+        E(this, "_name");
+        E(this, "_pickable", !1);
+        E(this, "urlTransformer");
+        E(this, "onLoadedObserverable", new Observable);
+        E(this, "onSubSequenceTransformationChangeObservable", new Observable);
+        E(this, "onIntersectionObservable", new Observable);
+        E(this, "_loaded");
+        E(this, "_isStarted");
+        E(this, "_isPaused");
+        E(this, "_isDisposing", !1);
+        E(this, "init", ()=>new Promise((e,t)=>{
+            this.urlTransformer(this._abosoluteUrl).then(r=>{
+                const n = new XMLHttpRequest;
+                n.open("get", r),
+                n.send(null),
+                n.onload = ()=>{
+                    if (n.status == 200) {
+                        const o = JSON.parse(n.responseText);
+                        this.load(o).then(()=>{
+                            this.onLoadedObserverable.notifyObservers(this),
+                            this._loaded = !0,
+                            e()
+                        }
+                        , ()=>{
+                            t(),
+                            logger.error("subSequence: Load ${jsonBlob} json fail")
+                        }
+                        )
+                    }
+                }
+                ,
+                n.onerror = ()=>{
+                    logger.error("http: Get ${jsonBlob} json fail"),
+                    t()
+                }
+            }
+            )
+        }
+        ));
+        E(this, "play", async(e=!0)=>new Promise(t=>{
+            if (this._animGroup.isPlaying && this._animGroup.stop(),
+            this._particleGroups.forEach(r=>{
+                var n;
+                ((n = r.emitterNode) == null ? void 0 : n.getClassName()) == "Mesh" && r.emitterNode instanceof Mesh ? r.emitterNode.isEnabled() && r.start() : r.start()
+            }
+            ),
+            this._animGroup.targetedAnimations.length == 0) {
+                this.show();
+                let r = 0;
+                this._spriteGroups.forEach(n=>{
+                    n.sprites.forEach(o=>{
+                        o.toIndex > r && (r = o.toIndex)
+                    }
+                    )
+                }
+                ),
+                this._spriteGroups.forEach(n=>{
+                    n.sprites.forEach(o=>{
+                        o.playAnimation(o.fromIndex, o.toIndex, e, o.delay, ()=>{
+                            o.toIndex == r && (this._isPaused = !0,
+                            this.hide(),
+                            t())
+                        }
+                        )
+                    }
+                    )
+                }
+                )
+            } else
+                this._animGroup.play(e),
+                this._spriteGroups.forEach(r=>{
+                    r.sprites.forEach(n=>{
+                        n.playAnimation(n.fromIndex, n.toIndex, e, n.delay)
+                    }
+                    )
+                }
+                ),
+                e ? this._animGroup.onAnimationGroupLoopObservable.addOnce(()=>{
+                    t()
+                }
+                ) : this._animGroup.onAnimationGroupEndObservable.addOnce(()=>{
+                    this._spriteGroups.forEach(r=>{
+                        r.sprites.forEach(n=>{
+                            n.isVisible = !1,
+                            n.isPickable = !1,
+                            n.stopAnimation()
+                        }
+                        )
+                    }
+                    ),
+                    t()
+                }
+                );
+            this._isStarted = !0,
+            this._isPaused = !1
+        }
+        ));
+        E(this, "stop", ()=>{
+            this._animGroup.stop(),
+            this._particleGroups.forEach(e=>{
+                e.systems.forEach(t=>{
+                    t.stop()
+                }
+                )
+            }
+            ),
+            this._spriteGroups.forEach(e=>{
+                e.sprites.forEach(t=>{
+                    t.stopAnimation()
+                }
+                )
+            }
+            ),
+            this._isStarted = !1
+        }
+        );
+        E(this, "clone", (e="Clone")=>{
+            const t = new XSubSequence(this._scene,this._abosoluteUrl);
+            return t._centerNode.name = e + "_" + this._centerNode.name,
+            t._animGroup.name = e + "_" + this._animGroup.name,
+            this._meshGroups.forEach(r=>{
+                const n = r.clone(e + "_", t._centerNode)
+                  , o = n.getChildren(void 0, !1);
+                if (o.forEach(a=>{
+                    a.setEnabled(!0)
+                }
+                ),
+                o.push(n),
+                n) {
+                    const a = r.getChildren(void 0, !1);
+                    a.push(r),
+                    this.animGroup.targetedAnimations.forEach(s=>{
+                        if (s.target instanceof Node$2) {
+                            const l = a.indexOf(s.target);
+                            l != -1 && t._animGroup.addTargetedAnimation(s.animation, o[l])
+                        }
+                    }
+                    )
+                }
+            }
+            ),
+            t._loaded = !0,
+            t
+        }
+        );
+        E(this, "goToFrame", e=>{
+            this._animGroup.start(!0, 1, e, e)
+        }
+        );
+        E(this, "pause", ()=>{
+            this._isPaused = !0,
+            this._animGroup.pause()
+        }
+        );
+        E(this, "reset", ()=>{
+            this._animGroup.reset()
+        }
+        );
+        E(this, "loadTrackToAnim", e=>{
+            const t = Array();
+            let r = !0;
+            e.keyFrame.forEach(o=>{
+                if (o.frame > this._endFrame && (this._endFrame = o.frame),
+                o.value instanceof Array) {
+                    const a = {
+                        frame: o.frame,
+                        value: new Vector3(0,0,0)
+                    }
+                      , s = new Vector3(o.value[0],o.value[1],o.value[2]);
+                    a.value = s,
+                    t.push(a)
+                } else
+                    t.push(o),
+                    r = !1
+            }
+            ),
+            e.loop == null && (e.loop = !1),
+            e.index == null && (e.index = 0);
+            let n = null;
+            if ("blockName"in e) {
+                const o = {
+                    keyFrame: t,
+                    blockName: e.blockName,
+                    property: e.property,
+                    targetName: e.targetName,
+                    index: e.index,
+                    loop: e.loop
+                };
+                n = this.transferTrackToAnim(o, r)
+            } else {
+                const o = {
+                    keyFrame: t,
+                    property: e.property,
+                    targetName: e.targetName,
+                    index: e.index,
+                    loop: e.loop
+                };
+                n = this.transferTrackToAnim(o, r)
+            }
+            return n
+        }
+        );
+        E(this, "transferTrackToAnim", (e,t)=>{
+            let r = null;
+            t ? (r = new Animation(e.targetName + "_" + e.property,e.property,DEFAULT_FRAME_RATE,Animation.ANIMATIONTYPE_VECTOR3,Animation.ANIMATIONLOOPMODE_CYCLE),
+            r.setKeys(e.keyFrame)) : (r = new Animation(e.targetName + "_" + e.property,e.property,DEFAULT_FRAME_RATE,Animation.ANIMATIONTYPE_FLOAT,Animation.ANIMATIONLOOPMODE_CYCLE),
+            r.setKeys(e.keyFrame));
+            let n = null;
+            return "blockName"in e ? n = {
+                animation: r,
+                blockName: e.blockName,
+                targetName: e.targetName,
+                nodeIndex: e.index,
+                loop: e.loop
+            } : n = {
+                animation: r,
+                targetName: e.targetName,
+                nodeIndex: e.index,
+                loop: e.loop
+            },
+            n
+        }
+        );
+        t.indexOf("./") == 0 && (t = t.slice(2)),
+        this._abosoluteUrl = t,
+        this._name = t.split("/").slice(-1)[0].split(".")[0].split("_")[1],
+        this._rootDir = t.split("/").slice(0, -1).join("/") + "/",
+        this._scene = e,
+        this._meshGroups = new Map,
+        this._animGroup = new AnimationGroup("SubSeqAnim_",this._scene),
+        this._particleGroups = new Map,
+        this._materialGroups = new Map,
+        this._glowGroups = new Map,
+        this._highLightGroups = new Map,
+        this._spriteGroups = new Map,
+        this._endFrame = 0,
+        this._centerNode = new BABYLON.TransformNode("__rootSubSeq__",e),
+        this._loaded = !1,
+        this._isPaused = !0,
+        this._isStarted = !1,
+        this._centerNode.setEnabled(!1),
+        this.urlTransformer = r,
+        this._centerNode.onAfterWorldMatrixUpdateObservable.add(()=>{
+            this.onSubSequenceTransformationChangeObservable.notifyObservers(this)
+        }
+        ),
+        this._animGroup.onAnimationGroupPlayObservable.add(()=>{
+            this._particleGroups.forEach(n=>{
+                n.systems.forEach(o=>{
+                    o.isStarted() || o.start()
+                }
+                )
+            }
+            ),
+            this.show()
+        }
+        ),
+        this._animGroup.onAnimationGroupLoopObservable.add(()=>{
+            this._particleGroups.forEach(n=>{
+                n.systems.forEach(o=>{
+                    o.isStarted() || o.start()
+                }
+                )
+            }
+            ),
+            this.show()
+        }
+        ),
+        this._animGroup.onAnimationGroupEndObservable.add(()=>{
+            this.hide()
+        }
+        )
+    }
+    dispose() {
+        this._isDisposing = !0,
+        this._spriteGroups.forEach(e=>{
+            e.dispose()
+        }
+        ),
+        this._glowGroups.forEach(e=>{
+            e.dispose()
+        }
+        ),
+        this._highLightGroups.forEach(e=>{
+            e.dispose()
+        }
+        ),
+        this._particleGroups.forEach(e=>{
+            XParticleManager.disposeParticleSysSet(e)
+        }
+        ),
+        this._animGroup.stop(),
+        this._animGroup.dispose(),
+        this._meshGroups.forEach(e=>{
+            e.getChildren(void 0, !1).forEach(t=>{
+                var r, n;
+                (t.getClassName() === "AbstractMesh" || t.getClassName() === "Mesh") && ((r = t.skeleton) == null || r.dispose(),
+                (n = t.material) == null || n.dispose(!0, !0)),
+                t.dispose(!0, !0)
+            }
+            ),
+            e.dispose(!1, !0)
+        }
+        ),
+        this._centerNode.dispose(!1, !0),
+        this._materialGroups.forEach(e=>{}
+        ),
+        this._materialGroups.clear(),
+        this._spriteGroups.clear(),
+        this._glowGroups.clear(),
+        this._highLightGroups.clear(),
+        this._meshGroups.clear(),
+        this._particleGroups.clear(),
+        this._loaded = !1
+    }
+    get animGroup() {
+        return this._animGroup
+    }
+    get name() {
+        return this._name
+    }
+    get path() {
+        return this._abosoluteUrl
+    }
+    get position() {
+        return xversePosition2Ue4(this.pos)
+    }
+    get rotation() {
+        return xverseRotation2Ue4(this.rot)
+    }
+    get scaling() {
+        return this.scal
+    }
+    get pos() {
+        return this._centerNode.position
+    }
+    get rot() {
+        return this._centerNode.rotation
+    }
+    get scal() {
+        return this._centerNode.scaling
+    }
+    get root() {
+        return this._centerNode
+    }
+    get loaded() {
+        return this._loaded
+    }
+    get isPlaying() {
+        return this._animGroup ? this._animGroup.isPlaying : this._isStarted && !this._isPaused
+    }
+    get isStarted() {
+        return this._animGroup ? this._animGroup.isStarted : this._isStarted
+    }
+    get isPickable() {
+        return this._pickable
+    }
+    set isPickable(e) {
+        this._meshGroups.forEach(t=>{
+            t.getChildMeshes().forEach(r=>{
+                r.isPickable = e
+            }
+            )
+        }
+        ),
+        this._spriteGroups.forEach(t=>{
+            t.isPickable = e,
+            t.sprites.forEach(r=>{
+                r.isPickable = e
+            }
+            )
+        }
+        ),
+        this._pickable = e
+    }
+    addAnimation(e) {
+        this._animGroup.addTargetedAnimation(e, this._centerNode),
+        this._spriteGroups.forEach(t=>{
+            t.sprites.forEach(r=>{
+                this._animGroup.addTargetedAnimation(e, r)
+            }
+            )
+        }
+        )
+    }
+    setStartFrame(e) {
+        this._animGroup.stop(),
+        this._animGroup.targetedAnimations.forEach(t=>{
+            const r = t.animation.getKeys();
+            r.forEach(n=>{
+                e + r[0].frame > 0 ? n.frame += e : n.frame -= r[0].frame
+            }
+            )
+        }
+        )
+    }
+    lookAt(e) {
+        ue4Position2Xverse(e) && this.root.lookAt(ue4Position2Xverse(e))
+    }
+    setPosition(e) {
+        this.setPositionVector(ue4Position2Xverse(e))
+    }
+    setPositionVector(e) {
+        this._centerNode.position = e,
+        this._particleGroups.forEach(t=>{
+            t.emitterNode == null || t.emitterNode instanceof Vector3 ? t.emitterNode = e : this._scene.getMeshByName(t.emitterNode.name) || (t.emitterNode = e)
+        }
+        ),
+        this._spriteGroups.forEach(t=>{
+            t.sprites.forEach((r,n)=>{
+                r.position = e
+            }
+            )
+        }
+        )
+    }
+    setScaling(e) {
+        this.setScalingVector(ue4Scaling2Xverse(e))
+    }
+    setScalingVector(e) {
+        var t;
+        this._centerNode.scaling = e,
+        (t = this._particleGroups) == null || t.forEach(r=>{
+            r.systems.forEach(n=>{
+                XParticleManager.scalingInPlace(n, e.x)
+            }
+            )
+        }
+        ),
+        this._spriteGroups.forEach(r=>{
+            r.sprites.forEach(n=>{
+                n.size *= e.x
+            }
+            )
+        }
+        )
+    }
+    setRotation(e) {
+        this.setRotationVector(ue4Rotation2Xverse(e))
+    }
+    setRotationVector(e) {
+        this._centerNode.rotation = e
+    }
+    hide() {
+        this._centerNode.setEnabled(!1),
+        this._particleGroups.forEach(e=>{
+            e.systems.forEach(t=>{
+                t.isStarted() && t.stop()
+            }
+            )
+        }
+        ),
+        this._spriteGroups.forEach(e=>{
+            e.sprites.forEach(t=>{
+                t.isVisible = !1
+            }
+            )
+        }
+        )
+    }
+    show() {
+        this._centerNode.setEnabled(!0),
+        this._centerNode.getChildren().forEach(e=>{
+            e.setEnabled(!0),
+            e.getChildMeshes().forEach(t=>{
+                t.setEnabled(!0)
+            }
+            )
+        }
+        ),
+        this._particleGroups.forEach(e=>{
+            e.systems.forEach(t=>{
+                t.start()
+            }
+            )
+        }
+        ),
+        this._spriteGroups.forEach(e=>{
+            e.sprites.forEach(t=>{
+                t.isVisible = !0
+            }
+            )
+        }
+        )
+    }
+    get totalFrame() {
+        return this._endFrame
+    }
+    load(e) {
+        return new Promise((t,r)=>{
+            const n = e.Mesh
+              , o = e.Sprite
+              , a = e.Material
+              , s = e.Glow
+              , l = e.HighLight
+              , u = e.Particle
+              , c = e.MeshTrack
+              , h = e.ParticleTrack
+              , f = e.MaterialTrack;
+            this._animGroup.name += e.Type;
+            const d = Date.now();
+            this._centerNode.name += e.Type;
+            const _ = new Array
+              , g = new Array;
+            n != null && n.forEach(m=>{
+                _.push(this.loadMesh(m))
+            }
+            ),
+            o != null && o.forEach(m=>{
+                g.push(this.loadSprite(m))
+            }
+            ),
+            Promise.all(_).then(()=>{
+                a != null && a.forEach(m=>{
+                    g.push(this.loadMaterial(m))
+                }
+                ),
+                u != null && u.forEach(m=>{
+                    g.push(this.loadParticle(m))
+                }
+                ),
+                Promise.all(g).then(()=>{
+                    if (this._isDisposing) {
+                        const v = Date.now() - d;
+                        logger.info(`subSequence: Load ${e.Type} takes ${v} ms`),
+                        t(this);
+                        return
+                    }
+                    if (s != null)
+                        for (const v of s)
+                            this.loadGlow(v);
+                    if (l != null)
+                        for (const v of l)
+                            this.loadHighLight(v);
+                    c != null && c.forEach(v=>{
+                        const y = this._meshGroups.get(v.targetName);
+                        if (y != null) {
+                            const b = this.loadTrackToAnim(v);
+                            ROOT_MESH_ANIM_PROPERTY.indexOf(b.animation.targetProperty) == -1 ? y.getChildMeshes().forEach(T=>{
+                                b.animation.targetProperty in T && this._animGroup.addTargetedAnimation(b.animation, T)
+                            }
+                            ) : this._animGroup.addTargetedAnimation(b.animation, y)
+                        }
+                    }
+                    ),
+                    h != null && h.forEach(v=>{
+                        var C;
+                        const y = v.index
+                          , b = v.targetName
+                          , T = (C = this._particleGroups.get(b)) == null ? void 0 : C.systems[y];
+                        if (T != null) {
+                            const A = this.loadTrackToAnim(v);
+                            this._animGroup.addTargetedAnimation(A.animation, T)
+                        }
+                    }
+                    ),
+                    f != null && f.forEach(v=>{
+                        const y = this._materialGroups.get(v.targetName);
+                        if (y) {
+                            const b = y[0];
+                            if (b != null)
+                                if (b.getBlockByName(v.blockName) != null) {
+                                    const T = this.loadTrackToAnim(v);
+                                    y == null || y.forEach(C=>{
+                                        this._animGroup.addTargetedAnimation(T.animation, C.getBlockByName(v.blockName))
+                                    }
+                                    )
+                                } else
+                                    console.error("property " + v.property + "is not in " + b.name)
+                        }
+                    }
+                    );
+                    const m = Date.now() - d;
+                    logger.info(`subSequence: Load ${e.Type} takes ${m} ms`),
+                    t(this)
+                }
+                , ()=>{
+                    logger.error(`subSequence: Load ${e.Type} fail`),
+                    r()
+                }
+                )
+            }
+            , ()=>{
+                r()
+            }
+            )
+        }
+        )
+    }
+    loadMesh(e) {
+        return new Promise((t,r)=>{
+            const n = this._rootDir + e.uri;
+            this.urlTransformer(n).then(o=>{
+                if (this._isDisposing) {
+                    t();
+                    return
+                }
+                SceneLoader.LoadAssetContainer("", o, this._scene, a=>{
+                    if (this._isDisposing) {
+                        a.removeAllFromScene(),
+                        t();
+                        return
+                    }
+                    a.animationGroups.forEach(l=>{
+                        l.stop()
+                    }
+                    ),
+                    a.animationGroups.length != 0 && (a.animationGroups.forEach(l=>{
+                        l.targetedAnimations.forEach(u=>{
+                            this._animGroup.addTargetedAnimation(u.animation, u.target)
+                        }
+                        ),
+                        l.dispose()
+                    }
+                    ),
+                    a.animationGroups = [],
+                    a.animations = [],
+                    a.materials = []);
+                    const s = new BABYLON.TransformNode("__root__" + e.name,this._scene);
+                    if (e.uri.split(".")[1] == "glb")
+                        a.meshes[0].parent = s;
+                    else if (e.uri.split(".")[1] == "obj") {
+                        const l = new BABYLON.TransformNode("__root__",this._scene);
+                        a.meshes.forEach(u=>{
+                            u.parent = l,
+                            u.Type = MESH_TAG
+                        }
+                        ),
+                        l.parent = s
+                    }
+                    s.getChildMeshes().forEach(l=>{
+                        e.isPickable != null ? l.isPickable = e.isPickable : l.isPickable = !1,
+                        l.xtype = "XSubSequence"
+                    }
+                    ),
+                    this._meshGroups.set(e.name, s),
+                    s.parent = this._centerNode,
+                    a.addAllToScene(),
+                    t()
+                }
+                , ()=>{}
+                , ()=>{
+                    logger.error("subSequence:Load effect mesh fail"),
+                    logger.error(`Effect Mesh ${e.name} load error`),
+                    r()
+                }
+                , ".glb")
+            }
+            , ()=>{
+                logger.error("http:Get effect mesh fail"),
+                logger.error(`Effect Mesh ${e.name} load error`),
+                r()
+            }
+            )
+        }
+        )
+    }
+    loadSprite(e) {
+        return new Promise((t,r)=>{
+            if (this._isDisposing) {
+                t();
+                return
+            }
+            const n = this._rootDir + e.uri;
+            if (e.uri !== "") {
+                e.name;
+                const o = new XMLHttpRequest;
+                o.open("get", n),
+                o.send(null),
+                o.onload = ()=>{
+                    if (o.status == 200) {
+                        const a = JSON.parse(o.responseText)
+                          , s = XSpriteManager.Parse(a, this._scene, this._rootDir);
+                        s.sprites.forEach(l=>{
+                            l.stopAnimation()
+                        }
+                        ),
+                        this._spriteGroups.set(e.name, s),
+                        t()
+                    } else
+                        logger.error("subSequence:Load effect sprite fail"),
+                        logger.error(`Effect Sprite ${e.name} load error`),
+                        r()
+                }
+            }
+        }
+        )
+    }
+    loadMaterial(e) {
+        return new Promise((t,r)=>{
+            if (this._isDisposing) {
+                t();
+                return
+            }
+            const n = this._rootDir + e.uri;
+            if (e.uri !== "") {
+                const o = e.name
+                  , a = new NodeMaterial(`material_${o}`,this._scene,{
+                    emitComments: !1
+                });
+                a.backFaceCulling = !1,
+                this.urlTransformer(n).then(s=>{
+                    if (this._isDisposing) {
+                        a.dispose(!1, !0, !1),
+                        t();
+                        return
+                    }
+                    a.loadAsync(s).then(()=>{
+                        if (this._isDisposing) {
+                            a.dispose(!0, !0, !1),
+                            t();
+                            return
+                        }
+                        a.build(!1);
+                        const l = new Array;
+                        let u = !1;
+                        for (let c = 0; c < e.meshName.length; c++)
+                            this._meshGroups.forEach(h=>{
+                                h.getChildMeshes().forEach(f=>{
+                                    var d;
+                                    if (f.name === e.meshName[c]) {
+                                        u = !0,
+                                        (d = f.material) == null || d.dispose(!0, !0);
+                                        const _ = f;
+                                        if (_.skeleton == null) {
+                                            const g = a;
+                                            _.material = g,
+                                            l.push(g)
+                                        } else if (_.numBoneInfluencers = 4,
+                                        _.computeBonesUsingShaders = !0,
+                                        c == 0) {
+                                            const g = a;
+                                            _.material = g,
+                                            l.push(g)
+                                        } else {
+                                            const g = a.clone(`material_${o}` + String(c), !1);
+                                            _.material = g,
+                                            l.push(g)
+                                        }
+                                    }
+                                }
+                                )
+                            }
+                            );
+                        u ? this._materialGroups.set(e.name, l) : a.dispose(!0, !0),
+                        t()
+                    }
+                    , ()=>{
+                        logger.error("http:Get effect Material fail"),
+                        logger.error(`Effect NodeMaterial ${o} load error`),
+                        r()
+                    }
+                    )
+                }
+                )
+            }
+        }
+        )
+    }
+    async loadGlow(e) {
+        const t = new GlowLayer(e.name,this._scene,{
+            blurKernelSize: e.blurKernelSize
+        });
+        t.intensity = e.intensity,
+        e.meshName.forEach(r=>{
+            const n = this._scene.getMeshByName(r);
+            n != null && t.addIncludedOnlyMesh(n)
+        }
+        ),
+        this._glowGroups.set(e.name, t)
+    }
+    loadHighLight(e) {
+        const t = new HighlightLayer(e.name,this._scene);
+        e.meshName.forEach(r=>{
+            const n = this._scene.getMeshByName(r);
+            if (n != null) {
+                const o = new Color3(e.color[0],e.color[1],e.color[2]);
+                t.addMesh(n, o)
+            }
+        }
+        ),
+        this._highLightGroups.set(e.name, t)
+    }
+    loadParticle(e) {
+        return new Promise((t,r)=>{
+            const n = this._rootDir + e.rootDir
+              , o = new XParticleManager(this._scene);
+            this.urlTransformer(n + e.uri).then(a=>{
+                if (this._isDisposing) {
+                    t();
+                    return
+                }
+                o.load(n, e.uri, e.name).then(s=>{
+                    if (this._isDisposing) {
+                        r();
+                        return
+                    }
+                    this._particleGroups.set(e.name, s),
+                    t()
+                }
+                , ()=>{
+                    logger.error(`SubSequence: ${e.name} particle load fail`),
+                    r()
+                }
+                )
+            }
+            , ()=>{
+                logger.error(`http: ${n + e.uri} load fail`),
+                r()
+            }
+            )
+        }
+        )
+    }
+}

+ 5 - 0
src/enum/GetStateTypes.js

@@ -0,0 +1,5 @@
+var GetStateTypes = {
+    Default:0,
+    Event:1
+}
+export default GetStateTypes

+ 11 - 0
src/enum/SyncEventType.js

@@ -0,0 +1,11 @@
+var SyncEventType = {
+    Reset:0,
+    Appear:1,
+    Disappear:2,
+    Move:3,
+    ChangeRenderInfo:4,
+    KeepAlive:5,
+    Rotate:6,
+    ET_RemoveVisitor:7
+}
+export default SyncEventType