2 * Copyright (c) 2011 Kazuhiko Kobayashi
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * * Neither the name of 'MMDLoaderJME' nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 package projectkyoto.mmd.file;
35 import java.io.IOException;
36 import java.io.Serializable;
37 import java.nio.ByteBuffer;
38 import javax.vecmath.Point3f;
39 import javax.vecmath.Quat4f;
40 import projectkyoto.mmd.file.util2.BufferUtil;
46 public class VMDMotion implements Serializable{
48 private String boneName; // char[15]
50 private Point3f location;
51 private Quat4f rotation;
52 private byte[] interpolation = new byte[64];
54 location = new Point3f();
55 rotation = new Quat4f();
57 public VMDMotion(DataInputStreamLittleEndian is) throws IOException {
58 boneName = is.readString(15);
59 // System.out.println("boneName = "+boneName);
60 frameNo = is.readInt();
61 location = new Point3f();
62 location.x = is.readFloat();
63 location.y = is.readFloat();
64 location.z = -is.readFloat();
65 rotation = new Quat4f(is.readFloat(), is.readFloat(), -is.readFloat(), -is.readFloat());
66 is.read(interpolation);
68 // public VMDMotion readFromBuffer(ByteBuffer bb) {
69 // boneName = BufferUtil.readString(bb, 15);
70 // frameNo = bb.getInt();
71 // BufferUtil.readPoint3f(bb, location);
72 // BufferUtil.readQuat4f(bb, rotation);
73 // bb.get(interpolation);
76 // public VMDMotion writeToBuffer(ByteBuffer bb) {
77 // BufferUtil.writeString(bb, boneName, 15);
78 // bb.putInt(frameNo);
84 public String toString() {
85 StringBuffer sb = new StringBuffer();
86 sb.append("{boneName = " + boneName
87 + " frameNo = " + frameNo
88 + " location = " + location
89 + " rotation = " + rotation
90 + " interpolation = {");
91 for (int i = 0; i < 64; i++) {
92 sb.append(interpolation[i]).append(',');
99 public String getBoneName() {
103 public void setBoneName(String boneName) {
104 this.boneName = boneName;
107 public int getFrameNo() {
111 public void setFlameNo(int frameNo) {
112 this.frameNo = frameNo;
115 public byte[] getInterpolation() {
116 return interpolation;
119 public void setInterpolation(byte[] interpolation) {
120 this.interpolation = interpolation;
123 public Point3f getLocation() {
127 public void setLocation(Point3f location) {
128 this.location = location;
131 public Quat4f getRotation() {
135 public void setRotation(Quat4f rotation) {
136 this.rotation = rotation;