package com.junerking.skeleton; import java.util.ArrayList; import com.junerking.skeleton.DataDef.AnimationData; import com.junerking.skeleton.DataDef.ArmatureData; import com.junerking.skeleton.DataDef.BoneData; import com.junerking.skeleton.DataDef.SubTextureData; public class Skeleton { private int version; public Skeleton() { } public void setVersion(int version) { this.version = version; } public int getVersion() { return version; } private ArrayList<ArmatureData> _armatures = new ArrayList<ArmatureData>(); private ArrayList<AnimationData> _animations = new ArrayList<AnimationData>(); private ArrayList<SubTextureData> _subtextures = new ArrayList<SubTextureData>(); public Armature buildArmature(String name) { ArmatureData armature_data = null; for (int i = 0; i < _armatures.size(); i++) { ArmatureData data = _armatures.get(i); if (data.name.equals(name)) { armature_data = data; break; } } if (null == armature_data) return null; Armature armature = new Armature(name); AnimationData animation_data = getAnimationByName(name); armature.animation.setAnimationData(animation_data); armature.sub_texture_list = _subtextures; ArrayList<BoneData> bone_data_list = armature_data.getBoneDataList(); ArrayList<Bone> bone_list = new ArrayList<Bone>(); for (int i = 0; i < bone_data_list.size(); i++) { bone_list.add(buildBone(bone_data_list.get(i))); } for (int i = 0; i < bone_list.size(); i++) { BoneData bone_data = bone_data_list.get(i); Bone bone = bone_list.get(i); if (null != bone_data.parent && !bone_data.parent.equals("")) { int index_parent = -1; for (int j = 0; j < bone_data_list.size(); j++) { if (bone_data_list.get(j).name.equals(bone_data.parent)) { index_parent = j; break; } } Bone bone_parent = bone_list.get(index_parent); bone_parent.addChild(bone); armature.addToBones(bone, false); } else { armature.addToBones(bone, true); } } armature.updateZOrder(); return armature; } protected Bone buildBone(BoneData bone_data) { Bone result = new Bone(); result.origin.copy(bone_data); result.name = bone_data.name; result.display_list = bone_data.getDisplayDataList(); return result; } public ArmatureData getArmatureByName(String name) { for (int i = 0; i < _armatures.size(); i++) { ArmatureData armature = _armatures.get(i); if (armature.name.compareTo(name) == 0) { return armature; } } return null; } public AnimationData getAnimationByName(String name) { for (int i = 0; i < _animations.size(); i++) { AnimationData animation = _animations.get(i); if (animation.name.equals(name)) { return animation; } } return null; } public void addAnimationData(AnimationData animation) { _animations.add(animation); } public void addArmatureData(ArmatureData armature) { _armatures.add(armature); } public void addSubTextureData(SubTextureData subtexture) { _subtextures.add(subtexture); } }