|
|
|
@ -455,44 +455,213 @@ |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 更稳的位图预览:HTMLImage / ImageBitmap / ImageData / nativeUrl */ |
|
|
|
|
|
|
|
function imageFromAsset(asset, type) { |
|
|
|
|
|
|
|
if (type === 'SpriteFrame') { |
|
|
|
|
|
|
|
var tex = asset.texture || (asset.getTexture && asset.getTexture()); |
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
img: (tex && tex.image) || (tex && tex._image) || null, |
|
|
|
|
|
|
|
rect: asset.rect || asset._rect || null, |
|
|
|
|
|
|
|
nativeUrl: (tex && tex.image && tex.image.nativeUrl) || (tex && tex.nativeUrl) || asset.nativeUrl || '', |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (type === 'ImageAsset') { |
|
|
|
|
|
|
|
return { img: asset, rect: null, nativeUrl: asset.nativeUrl || '' }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var im = asset.image || asset._image || null; |
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
img: im, |
|
|
|
|
|
|
|
rect: null, |
|
|
|
|
|
|
|
nativeUrl: (im && im.nativeUrl) || asset.nativeUrl || asset._nativeUrl || '', |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function buildPreview(asset, type) { |
|
|
|
function buildPreview(asset, type) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
if (type === 'SpriteFrame') { |
|
|
|
var pack = imageFromAsset(asset, type); |
|
|
|
var tex = asset.texture || (asset.getTexture && asset.getTexture()); |
|
|
|
var img = pack.img; |
|
|
|
var img = tex && tex.image; |
|
|
|
var data = img && (img._data || img.data); |
|
|
|
var data = img && (img._data || img.data); |
|
|
|
var rect = pack.rect; |
|
|
|
var rect = asset.rect || asset._rect || { x: 0, y: 0, width: asset.width, height: asset.height }; |
|
|
|
|
|
|
|
if (data && typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) { |
|
|
|
// HTMLImageElement
|
|
|
|
|
|
|
|
if (data && typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) { |
|
|
|
|
|
|
|
if (rect && type === 'SpriteFrame') { |
|
|
|
var ih = data.height || img.height || 0; |
|
|
|
var ih = data.height || img.height || 0; |
|
|
|
var sw = Math.max(1, rect.width | 0); |
|
|
|
var sw = Math.max(1, rect.width | 0); |
|
|
|
var sh = Math.max(1, rect.height | 0); |
|
|
|
var sh = Math.max(1, rect.height | 0); |
|
|
|
var cv = document.createElement('canvas'); |
|
|
|
var cv = document.createElement('canvas'); |
|
|
|
cv.width = sw; |
|
|
|
cv.width = sw; |
|
|
|
cv.height = sh; |
|
|
|
cv.height = sh; |
|
|
|
cv.getContext('2d').drawImage(data, rect.x | 0, Math.max(0, ih - (rect.y | 0) - sh) | 0, sw, sh, 0, 0, sw, sh); |
|
|
|
cv.getContext('2d').drawImage( |
|
|
|
|
|
|
|
data, |
|
|
|
|
|
|
|
rect.x | 0, |
|
|
|
|
|
|
|
Math.max(0, ih - (rect.y | 0) - sh) | 0, |
|
|
|
|
|
|
|
sw, sh, 0, 0, sw, sh |
|
|
|
|
|
|
|
); |
|
|
|
return { kind: 'image', w: sw, h: sh, url: cv.toDataURL('image/png') }; |
|
|
|
return { kind: 'image', w: sw, h: sh, url: cv.toDataURL('image/png') }; |
|
|
|
} |
|
|
|
} |
|
|
|
return { kind: 'none' }; |
|
|
|
return { kind: 'image', w: data.width, h: data.height, url: data.src || '' }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ImageBitmap:画到 canvas
|
|
|
|
|
|
|
|
if (data && typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) { |
|
|
|
|
|
|
|
var c2 = document.createElement('canvas'); |
|
|
|
|
|
|
|
c2.width = data.width; |
|
|
|
|
|
|
|
c2.height = data.height; |
|
|
|
|
|
|
|
c2.getContext('2d').drawImage(data, 0, 0); |
|
|
|
|
|
|
|
return { kind: 'image', w: data.width, h: data.height, url: c2.toDataURL('image/png') }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ImageData
|
|
|
|
|
|
|
|
if (data && data.data && data.width && typeof ImageData !== 'undefined') { |
|
|
|
|
|
|
|
var c3 = document.createElement('canvas'); |
|
|
|
|
|
|
|
c3.width = data.width; |
|
|
|
|
|
|
|
c3.height = data.height; |
|
|
|
|
|
|
|
c3.getContext('2d').putImageData(new ImageData(data.data, data.width, data.height), 0, 0); |
|
|
|
|
|
|
|
return { kind: 'image', w: data.width, h: data.height, url: c3.toDataURL('image/png') }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TypedArray / ArrayBuffer 位图
|
|
|
|
|
|
|
|
if (data && data.buffer && data.width && data.height && typeof Uint8Array !== 'undefined') { |
|
|
|
|
|
|
|
var c4 = document.createElement('canvas'); |
|
|
|
|
|
|
|
c4.width = data.width; |
|
|
|
|
|
|
|
c4.height = data.height; |
|
|
|
|
|
|
|
var ctx4 = c4.getContext('2d'); |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
ctx4.putImageData(new ImageData(new Uint8ClampedArray(data.buffer, data.byteOffset || 0, data.width * data.height * 4), data.width, data.height), 0, 0); |
|
|
|
|
|
|
|
return { kind: 'image', w: data.width, h: data.height, url: c4.toDataURL('image/png') }; |
|
|
|
|
|
|
|
} catch (e1) { /* */ } |
|
|
|
} |
|
|
|
} |
|
|
|
var im = type === 'ImageAsset' ? asset : (asset.image || asset._image); |
|
|
|
|
|
|
|
var d2 = im && (im._data || im.data); |
|
|
|
// nativeUrl
|
|
|
|
if (d2 && typeof HTMLImageElement !== 'undefined' && d2 instanceof HTMLImageElement) { |
|
|
|
if (pack.nativeUrl) { |
|
|
|
return { kind: 'image', w: d2.width, h: d2.height, url: d2.src || '' }; |
|
|
|
return { |
|
|
|
|
|
|
|
kind: 'url', |
|
|
|
|
|
|
|
url: pack.nativeUrl, |
|
|
|
|
|
|
|
w: (img && img.width) || asset.width || 0, |
|
|
|
|
|
|
|
h: (img && img.height) || asset.height || 0, |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (asset.nativeUrl) { |
|
|
|
|
|
|
|
return { kind: 'url', url: asset.nativeUrl, w: asset.width | 0, h: asset.height | 0 }; |
|
|
|
} |
|
|
|
} |
|
|
|
if (im && im.nativeUrl) return { kind: 'url', url: im.nativeUrl, w: im.width | 0, h: im.height | 0 }; |
|
|
|
|
|
|
|
if (asset.nativeUrl) return { kind: 'url', url: asset.nativeUrl, w: asset.width | 0, h: asset.height | 0 }; |
|
|
|
|
|
|
|
} catch (e) { /* */ } |
|
|
|
} catch (e) { /* */ } |
|
|
|
return { kind: 'none' }; |
|
|
|
return { kind: 'none' }; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function previewAsset(uuid) { |
|
|
|
/** 反向引用:谁依赖了 uuid(资源/节点名) */ |
|
|
|
|
|
|
|
function reverseRefs(uuid, cc) { |
|
|
|
|
|
|
|
var deps = []; |
|
|
|
|
|
|
|
var depUtil = cc && cc.assetManager && cc.assetManager.dependUtil; |
|
|
|
|
|
|
|
var assets = cc && cc.assetManager && cc.assetManager.assets; |
|
|
|
|
|
|
|
if (!assets || !assets.forEach) return deps; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
assets.forEach(function (asset, id) { |
|
|
|
|
|
|
|
if (!id || String(id) === String(uuid)) return; |
|
|
|
|
|
|
|
var list = null; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
if (depUtil && depUtil.getDeps) list = depUtil.getDeps(id); |
|
|
|
|
|
|
|
} catch (e) { list = null; } |
|
|
|
|
|
|
|
if (!list || !list.length) return; |
|
|
|
|
|
|
|
for (var i = 0; i < list.length; i++) { |
|
|
|
|
|
|
|
if (String(list[i]) === String(uuid)) { |
|
|
|
|
|
|
|
deps.push({ |
|
|
|
|
|
|
|
uuid: String(id), |
|
|
|
|
|
|
|
name: asset && asset.name ? asset.name : String(id), |
|
|
|
|
|
|
|
type: fmtType(asset), |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} catch (e2) { /* */ } |
|
|
|
|
|
|
|
// 场景节点名:遍历当前场景找引用(spriteFrame/texture 等)
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
if (cc.director && cc.director.getScene && cc.UITransform) { |
|
|
|
|
|
|
|
var scene = cc.director.getScene(); |
|
|
|
|
|
|
|
var walkN = function (node) { |
|
|
|
|
|
|
|
if (!node) return; |
|
|
|
|
|
|
|
var comps = node.components || []; |
|
|
|
|
|
|
|
for (var c = 0; c < comps.length; c++) { |
|
|
|
|
|
|
|
var comp = comps[c]; |
|
|
|
|
|
|
|
if (!comp) continue; |
|
|
|
|
|
|
|
var vals = ['spriteFrame', 'texture', 'spriteAtlas', 'skeletonData', 'clip', 'audioClip']; |
|
|
|
|
|
|
|
for (var v = 0; v < vals.length; v++) { |
|
|
|
|
|
|
|
var a = comp[vals[v]]; |
|
|
|
|
|
|
|
var au = a && (a._uuid || a.uuid); |
|
|
|
|
|
|
|
if (au && String(au) === String(uuid)) { |
|
|
|
|
|
|
|
deps.push({ |
|
|
|
|
|
|
|
uuid: node.uuid || '', |
|
|
|
|
|
|
|
name: (node.name || '?') + ' / ' + (comp.constructor && comp.constructor.name || ''), |
|
|
|
|
|
|
|
type: 'Node', |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var ch = node.children || []; |
|
|
|
|
|
|
|
for (var k = 0; k < ch.length; k++) walkN(ch[k]); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
walkN(scene); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} catch (e3) { /* */ } |
|
|
|
|
|
|
|
return deps.slice(0, 40); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 详情:预览 + 路径 + 反向引用 */ |
|
|
|
|
|
|
|
function assetDetail(uuid) { |
|
|
|
var cc = global.cc; |
|
|
|
var cc = global.cc; |
|
|
|
var asset = null; |
|
|
|
var asset = null; |
|
|
|
try { |
|
|
|
try { |
|
|
|
asset = cc.assetManager.assets.get(uuid); |
|
|
|
asset = cc.assetManager.assets.get(uuid); |
|
|
|
} catch (e) { /* */ } |
|
|
|
} catch (e) { /* */ } |
|
|
|
if (!asset) return { kind: 'none' }; |
|
|
|
if (!asset) { |
|
|
|
return buildPreview(asset, fmtType(asset)); |
|
|
|
return { kind: 'none', name: '', bundle: '', path: '', uuid: uuid, ref: 0, usedBy: [], refs: [] }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var type = fmtType(asset); |
|
|
|
|
|
|
|
var preview = buildPreview(asset, type); |
|
|
|
|
|
|
|
var path = ''; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
cc.assetManager.bundles.forEach(function (bundle) { |
|
|
|
|
|
|
|
if (path) return; |
|
|
|
|
|
|
|
if (typeof bundle.getAssetInfo === 'function') { |
|
|
|
|
|
|
|
var inf = bundle.getAssetInfo(uuid); |
|
|
|
|
|
|
|
if (inf && inf.path) path = inf.path; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} catch (e2) { /* */ } |
|
|
|
|
|
|
|
var bundleName = ''; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
cc.assetManager.bundles.forEach(function (bundle, name) { |
|
|
|
|
|
|
|
if (bundleName) return; |
|
|
|
|
|
|
|
if (bundle && bundle.cache && bundle.cache.has && bundle.cache.has(uuid)) { |
|
|
|
|
|
|
|
bundleName = name || bundle.name || ''; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} catch (e3) { /* */ } |
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
kind: preview.kind, |
|
|
|
|
|
|
|
url: preview.url || '', |
|
|
|
|
|
|
|
w: preview.w || 0, |
|
|
|
|
|
|
|
h: preview.h || 0, |
|
|
|
|
|
|
|
name: asset.name || uuid, |
|
|
|
|
|
|
|
type: type, |
|
|
|
|
|
|
|
bundle: bundleName, |
|
|
|
|
|
|
|
path: path, |
|
|
|
|
|
|
|
uuid: uuid, |
|
|
|
|
|
|
|
ref: asset.refCount != null ? asset.refCount : 0, |
|
|
|
|
|
|
|
refs: reverseRefs(uuid, cc), |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function previewAsset(uuid) { |
|
|
|
|
|
|
|
var d = assetDetail(uuid); |
|
|
|
|
|
|
|
return { |
|
|
|
|
|
|
|
kind: d.kind, |
|
|
|
|
|
|
|
url: d.url, |
|
|
|
|
|
|
|
w: d.w, |
|
|
|
|
|
|
|
h: d.h, |
|
|
|
|
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (global.PWAgent) { |
|
|
|
if (global.PWAgent) { |
|
|
|
@ -508,12 +677,14 @@ |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
global.PWAgent.prototype._previewAsset = function (uuid) { |
|
|
|
global.PWAgent.prototype._previewAsset = function (uuid) { |
|
|
|
return previewAsset(uuid); |
|
|
|
return assetDetail(uuid); |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
global.PWAssetsUtil = { |
|
|
|
global.PWAssetsUtil = { |
|
|
|
collectAssets: collectAssets, |
|
|
|
collectAssets: collectAssets, |
|
|
|
previewAsset: previewAsset, |
|
|
|
previewAsset: previewAsset, |
|
|
|
|
|
|
|
assetDetail: assetDetail, |
|
|
|
|
|
|
|
buildPreview: buildPreview, |
|
|
|
}; |
|
|
|
}; |
|
|
|
})(window); |
|
|
|
})(window); |
|
|
|
|