package com.siondream.core.spine;
import com.badlogic.gdx.assets.AssetDescriptor;
import com.badlogic.gdx.assets.AssetLoaderParameters;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.assets.loaders.AsynchronousAssetLoader;
import com.badlogic.gdx.assets.loaders.FileHandleResolver;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.JsonReader;
import com.badlogic.gdx.utils.JsonValue;
import com.badlogic.gdx.utils.JsonValue.JsonIterator;
import com.badlogic.gdx.utils.Logger;
import com.esotericsoftware.spine.AnimationStateData;
import com.esotericsoftware.spine.SkeletonData;
import com.siondream.core.Env;
import com.siondream.core.spine.SkeletonDataLoader.SkeletonDataLoaderParameter;
public class AnimationStateDataLoader
extends AsynchronousAssetLoader<AnimationStateData,
AnimationStateDataLoader.AnimationStateDataLoaderParameter> {
private Logger logger;
private AnimationStateData data;
public AnimationStateDataLoader(FileHandleResolver resolver) {
super(resolver);
logger = new Logger("AnimationStateDataLoader", Env.debugLevel);
data = null;
logger.info("initialising");
}
@Override
public void loadAsync(AssetManager manager, String fileName, FileHandle file, AnimationStateDataLoaderParameter parameter) {
logger.info("loading " + fileName);
data = new AnimationStateData(manager.get(parameter.skeletonName, SkeletonData.class));
try {
JsonReader reader = new JsonReader();
JsonValue root = reader.parse(file);
float defaultBlend = root.get("defaultBlend").asFloat();
logger.info("default blend: " + defaultBlend + "s");
data.setDefaultMix(defaultBlend);
JsonIterator blendIt = root.get("blends").iterator();
while (blendIt.hasNext()) {
JsonValue blendValue = blendIt.next();
String from = blendValue.get("from").asString();
String to = blendValue.get("to").asString();
float duration = blendValue.get("duration").asFloat();
data.setMix(from, to , duration);
logger.info("blend: " + from + " -> " + to + " [" + duration + "s]");
}
}
catch (Exception e) {
logger.error("error loading " + fileName + " " + e.getMessage());
}
}
@Override
public AnimationStateData loadSync(AssetManager manager, String fileName, FileHandle file, AnimationStateDataLoaderParameter parameter) {
return data;
}
@Override
public Array<AssetDescriptor> getDependencies(String fileName, FileHandle file, AnimationStateDataLoaderParameter parameter) {
SkeletonDataLoaderParameter skeletonParam = new SkeletonDataLoaderParameter();
skeletonParam.atlasName = parameter.atlasName;
skeletonParam.scale = Env.pixelsToMetres * parameter.scale;
Array<AssetDescriptor> deps = new Array<AssetDescriptor>();
deps.add(new AssetDescriptor(parameter.skeletonName, SkeletonData.class, skeletonParam));
return deps;
}
static public class AnimationStateDataLoaderParameter extends AssetLoaderParameters<AnimationStateData> {
private String skeletonName;
private String atlasName;
private float scale;
public AnimationStateDataLoaderParameter() {
skeletonName = "";
atlasName = "";
scale = 1.0f;
}
}
}