package eu.tankernn.gameEngine.loader.colladaLoader; import java.nio.FloatBuffer; import java.util.List; import org.lwjgl.BufferUtils; import org.lwjgl.util.vector.Matrix4f; import org.lwjgl.util.vector.Vector3f; import eu.tankernn.gameEngine.loader.xmlLoader.XmlNode; public class AnimationLoader { private static final Matrix4f CORRECTION = new Matrix4f().rotate((float) Math.toRadians(-90), new Vector3f(1, 0, 0)); private XmlNode animationData; private XmlNode jointHierarchy; public AnimationLoader(XmlNode animationData, XmlNode jointHierarchy){ this.animationData = animationData; this.jointHierarchy = jointHierarchy; } public AnimationData extractAnimation(){ String rootNode = findRootJointName(); float[] times = getKeyTimes(); float duration = times[times.length-1]; KeyFrameData[] keyFrames = initKeyFrames(times); List animationNodes = animationData.getChildren("animation"); for(XmlNode jointNode : animationNodes){ loadJointTransforms(keyFrames, jointNode, rootNode); } return new AnimationData(duration, keyFrames); } private float[] getKeyTimes(){ XmlNode timeData = animationData.getChild("animation").getChild("source").getChild("float_array"); String[] rawTimes = timeData.getData().split(" "); float[] times = new float[rawTimes.length]; for(int i=0;i