From 0843d96442ca3bf37f22e81cc44df753a8ebf761 Mon Sep 17 00:00:00 2001
From: fanxuehan <fanxuehan@qq.com>
Date: Wed, 9 Mar 2022 16:27:50 +0800
Subject: [PATCH] feat: asyncLoadDragonBoneAnime

---
 .DS_Store                             | Bin 10244 -> 10244 bytes
 assets/cocos_generator/script/util.ts |  67 ++++++++++++++++++++++++++
 2 files changed, 67 insertions(+)

diff --git a/.DS_Store b/.DS_Store
index c257b29e612f4d945559633ec58aac425bb66366..29750aff4fa9bef62a6da7247c09d823af66f858 100644
GIT binary patch
delta 37
tcmZn(XbG6$&&ahgU^hP_*Jd7ppKO~&BtElmY~W|y%&zc{ZL)~Oe*p0*4DA2_

delta 180
zcmZn(XbG6$&&azmU^hP_?`9r>pKP2g3<V5142cYtlX(SYCmRdoOGs8%8yOhuC>R@=
z)aocy8ycIK=qQ+&n@!#*Xf6X)oKl>ela!yI!vF+u6E=SnW8&D%uJDgkQ>F2k3IKVX
BEhYc}

diff --git a/assets/cocos_generator/script/util.ts b/assets/cocos_generator/script/util.ts
index d53ba2c..542abac 100644
--- a/assets/cocos_generator/script/util.ts
+++ b/assets/cocos_generator/script/util.ts
@@ -189,6 +189,73 @@ export async function asyncDelay(time) {
   })
 }
 
+export async function asyncLoadDragonBoneAnime(node, { skeJsonData: { url: skeJsonDataUrl }, texJsonData: { url: texJsonDataUrl }, texPngData: { url: texPngDataUrl } }) {
+
+    if (!texPngDataUrl || !texJsonDataUrl || !texPngDataUrl
+        || texPngDataUrl == '' || texJsonDataUrl == '' || texPngDataUrl == '') {
+        return;
+    }
+
+    return new Promise((resolve, reject) => {
+        if (node.animaNode) {
+            node.animaNode.removeFromParent();
+        }
+        const animaNode = new cc.Node();
+        animaNode.name = 'animaNode';
+        animaNode.parent = node;
+        animaNode.active = true;
+        node.animaNode = animaNode;
+
+        const dragonDisplay = animaNode.addComponent(dragonBones.ArmatureDisplay);
+
+        const loadTexture = new Promise((resolve, reject) => {
+            cc.assetManager.loadRemote(texPngDataUrl, (error, texture) => {
+                if (error) {
+                    reject(error);
+                }
+                resolve(texture);
+            });
+        });
+
+        const loadTexJsonData = new Promise((resolve, reject) => {
+            cc.assetManager.loadAny({ url: texJsonDataUrl }, (error, atlasJson) => {
+                if (error) {
+                    reject(error);
+                }
+                resolve(atlasJson);
+            });
+        });
+
+        const loadSkeJsonData = new Promise((resolve, reject) => {
+            cc.assetManager.loadAny({ url: skeJsonDataUrl }, (error, dragonBonesJson) => {
+                if (error) {
+                    reject(error);
+                }
+                resolve(dragonBonesJson);
+            });
+        });
+
+        Promise.all([loadTexture, loadTexJsonData, loadSkeJsonData]).then(([texture, atlasJson, dragonBonesJson]) => {
+            const atlas = new dragonBones.DragonBonesAtlasAsset();
+            atlas.atlasJson = JSON.stringify(atlasJson);
+            atlas.texture = texture;
+
+            const asset = new dragonBones.DragonBonesAsset();
+            asset.dragonBonesJson = JSON.stringify(dragonBonesJson);
+
+            dragonDisplay.dragonAtlasAsset = atlas;
+            dragonDisplay.dragonAsset = asset;
+
+            let armatureNames = dragonBonesJson.armature.map(data => data.name);
+
+            if (armatureNames.length > 0) {
+                dragonDisplay.armatureName = armatureNames[0];
+            }
+            resolve(animaNode);
+        });
+    });
+}
+
 export class FireworkSettings {
   baseNode; // 父节点
   nodeList; // 火花节点的array
-- 
2.21.0