Files
GDevelop/Extensions/SkeletonObject/Hskmanager.js
T
Wend1go 12c5df67fa Integrate experimental SkeletonObject into GD5 (#1138)
The object is looking for a maintainer! https://github.com/4ian/GDevelop/pull/1138

Flagged as experimental and added warning about this
2019-09-19 22:49:52 +01:00

63 lines
2.0 KiB
JavaScript

/**
GDevelop - Skeleton Object Extension
Copyright (c) 2017-2018 Franco Maciel (francomaciel10@gmail.com)
This project is released under the MIT License.
*/
gdjs.SkeletonObjectsManager = function(){
// List of loaded skeletons per object type
this.loadedObjects = {};
};
gdjs.SkeletonObjectsManager.getManager = function(runtimeScene){
if( !runtimeScene.skeletonObjectsManager ){
runtimeScene.skeletonObjectsManager = new gdjs.SkeletonObjectsManager();
}
return runtimeScene.skeletonObjectsManager;
};
gdjs.SkeletonObjectsManager.prototype.getSkeleton = function(runtimeScene, objectName, objectData){
if( !(objectName in this.loadedObjects) ){
this.loadedObjects[objectName] = this.loadSkeleton(runtimeScene, objectData);
}
return this.loadedObjects[objectName];
};
/**
* Load the Skeleton data
* @param {gdjs.RuntimeScene} runtimeScene
* @param {Object} objectData
*/
gdjs.SkeletonObjectsManager.prototype.loadSkeleton = function(runtimeScene, objectData){
var loader = new gdjs.sk.DataLoader();
var skeleton = {"loader": loader,
"armatures": [],
"rootArmature": 0};
var jsonManager = runtimeScene.getGame().getJsonManager();
var skeletalData = jsonManager.getLoadedJson(objectData.skeletalDataFilename);
if(!skeletalData) {
console.error("Tried to load a Skeleton file from \"" + objectData.skeletalDataFilename + "\" but this resource is not loaded.");
return skeleton;
}
if(objectData.apiName === "DragonBones"){
// Load sub-textures
loader.loadDragonBones(runtimeScene, objectData);
// Load the root armature with the given name
for(var i=0; i<skeletalData.armature.length; i++){
var armature = new gdjs.sk.SharedArmature();
armature.loadDragonBones(skeletalData.armature[i]);
skeleton.armatures.push(armature);
if(armature.name === objectData.rootArmatureName){
skeleton.rootArmature = i;
}
}
}
return skeleton;
};