@petkoneo/phaser3-rex-plugins
Version:
84 lines (65 loc) • 2.76 kB
JavaScript
import CreateBinaryFile from './CreateBinaryFile.js';
import { CubismModelSettingJson } from '../../framework/src/cubismmodelsettingjson';
import LoadChildrenFiles from './LoadChildrenFiles.js';
import SetValue from '../../../../utils/object/SetValue.js';
const GetFastValue = Phaser.Utils.Objects.GetFastValue;
const IsPlainObject = Phaser.Utils.Objects.IsPlainObject;
class Live2dFile extends Phaser.Loader.MultiFile {
constructor(loader, key, url, xhrSettings) {
if (IsPlainObject(key)) {
var config = key;
key = GetFastValue(config, 'key');
url = GetFastValue(config, 'url');
xhrSettings = GetFastValue(config, 'xhrSettings');
}
var cache = loader.cacheManager.custom.live2d;
// Load setting
var settingFile = CreateBinaryFile(loader, key, url, xhrSettings, 'setting');
super(loader, 'live2d', key, [settingFile]);
this.cache = cache;
this.homeDir = url.substring(0, url.lastIndexOf('/') + 1);
}
onFileComplete(file) {
var index = this.files.indexOf(file);
if (index === -1) {
return;
}
// console.log(`Load file '${file.key}' at '${file.url}'`)
this.pending--;
if (index === 0) {
var arrayBuffer = file.data;
var setting = new CubismModelSettingJson(arrayBuffer, arrayBuffer.byteLength);
file.data = setting;
// Load remainder files by setting
LoadChildrenFiles(this, setting);
}
}
addToCache() {
if (this.isReadyToProcess()) {
var textureManager = this.loader.textureManager;
var data = { key: this.key };
for (var i = 0, cnt = this.files.length; i < cnt; i++) {
var file = this.files[i];
var fileData = file.data;
// Process textures
if (file.dataKey.startsWith('textures')) {
var key = file.key.replace(`${this.key}!`, '');
var texture;
// Add image to textureManager manually
if (!textureManager.exists(key)) {
texture = textureManager.addImage(key, file.data);
} else {
texture = textureManager.get(key);
}
// Store glTexture to live2d data cache
fileData = texture.source[0].glTexture;
}
SetValue(data, file.dataKey, fileData, '!!!');
file.pendingDestroy();
}
this.cache.add(this.key, data);
this.complete = true;
}
}
}
export default Live2dFile;