📄 stage.java
字号:
package cameracontrol;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.util.Vector;
import java.io.*;
/**
* <p>Title: Stage.java</p>
* <p>Description: Data Structure for Camera Stage</p>
* <p>Copyright: Gameloft 2004</p>
* <p>Company: Gameloft Shanghai</p>
* @author Yi Wen Hu
* @version 1.0
*/
public class Stage {
int m_controlType; // 0, time control; 1, distance control;
int m_totalTime; // useless when bControlType=1;
int m_posRefer;
int m_posStyle; //0, absolute coordinates; 1, pale coordinates;
int m_lookatRefer;
int m_lookatStyle; //0, absolute coordinates; 1, pale coordinates;
int m_endDist, m_startDist;
int[] m_startPos = new int[3]; // x,y,z or angle,angle,distance
int[] m_startLookat = new int[3];
int[] m_startUp = new int[2]; // angle,angle
int[] m_endPos = new int[3];
int[] m_endLookat = new int[3];
int[] m_endUp = new int[2];
public Stage(Element e) {
String stAttr; // attribute value string
int valueAttr; // attribute value index
// control type
m_controlType = getAttributeValue(e, Reader.XML_SG_CONTROLTYPE,
Reader.XML_CONTROL_TYPE);
// total frames
stAttr = e.getAttribute(Reader.XML_SG_TOTALTIME);
if (stAttr != "") {
try {
valueAttr = Integer.valueOf(stAttr).intValue();
m_totalTime = valueAttr;
}
catch (Exception ep) {
}
}
// position reference
m_posRefer = getAttributeValue(e, Reader.XML_SG_POSITIONREFER,
Reader.XML_REFERENCE_OBJECT);
// position style
m_posStyle = getAttributeValue(e, Reader.XML_SG_POSITIONSTYLE,
Reader.XML_COORD_DEFINE);
// lookat reference
m_lookatRefer = getAttributeValue(e, Reader.XML_SG_LOOKATREFER,
Reader.XML_REFERENCE_OBJECT);
// lookat style
m_lookatStyle = getAttributeValue(e, Reader.XML_SG_LOOKATSTYLE,
Reader.XML_COORD_DEFINE);
if(m_controlType==1)
{
stAttr=e.getAttribute(Reader.XML_DISTANCE_ENDDIST);
if(stAttr.length()!=0)
m_endDist=Integer.valueOf(stAttr).intValue();
else
m_endDist=-1;
stAttr=e.getAttribute(Reader.XML_DISTANCE_STARTDIST);
if(stAttr.length()!=0)
m_startDist=Integer.valueOf(stAttr).intValue();
else
m_startDist=-1;
}
Element keyFrame = null;
keyFrame = (Element) e.getElementsByTagName(Reader.XML_START).item(0);
if (keyFrame != null) {
// start pos
m_startPos = getAttributeInts(keyFrame, Reader.XML_FRM_POSITION, 3);
// start lookat
m_startLookat = getAttributeInts(keyFrame, Reader.XML_FRM_LOOKAT, 3);
// start up
m_startUp = getAttributeInts(keyFrame, Reader.XML_FRM_UP, 2);
}
keyFrame = (Element) e.getElementsByTagName(Reader.XML_END).item(0);
if (keyFrame != null) {
// end pos
m_endPos = getAttributeInts(keyFrame, Reader.XML_FRM_POSITION, 3);
// end lookat
m_endLookat = getAttributeInts(keyFrame, Reader.XML_FRM_LOOKAT, 3);
// end up
m_endUp = getAttributeInts(keyFrame, Reader.XML_FRM_UP, 2);
}
}
private int getAttributeValue(Element e, String attrName, String[] valueStr) {
String stAttr;
int valueAttr;
stAttr = e.getAttribute(attrName);
if (stAttr == "") {
return 0;
}
valueAttr = Reader.getIndexOfString(stAttr, valueStr);
if (valueAttr == -1) {
return 0;
}
return valueAttr;
}
private int[] getAttributeInts(Element e, String attriName, int length) {
int[] re = new int[length];
String[] pos = e.getAttribute(attriName).trim().split(" ");
if (pos.length == length) {
for (int i = 0; i < length; i++) {
re[i] = Integer.valueOf(pos[i]).intValue();
}
}
return re;
}
public void save(FileOutputStream fos) {
byte[] data;
try {
data = Reader.reverseInt(m_controlType);
fos.write(data);
data = Reader.reverseInt(m_totalTime);
fos.write(data);
data = Reader.reverseInt(m_posRefer);
fos.write(data);
data = Reader.reverseInt(m_posStyle);
fos.write(data);
data = Reader.reverseInt(m_lookatRefer);
fos.write(data);
data = Reader.reverseInt(m_lookatStyle);
fos.write(data);
data=Reader.reverseInt(m_startDist);
fos.write(data);
data=Reader.reverseInt(m_endDist);
fos.write(data);
int i;
// start position
for (i = 0; i < 3; i++) {
data = Reader.reverseInt(m_startPos[i]);
fos.write(data);
}
// start lookat
for (i = 0; i < 3; i++) {
data = Reader.reverseInt(m_startLookat[i]);
fos.write(data);
}
// start up
for (i = 0; i < 2; i++) {
data = Reader.reverseInt(m_startUp[i]);
fos.write(data);
}
// end position
for (i = 0; i < 3; i++) {
data = Reader.reverseInt(m_endPos[i]);
fos.write(data);
}
// end lookat
for (i = 0; i < 3; i++) {
data = Reader.reverseInt(m_endLookat[i]);
fos.write(data);
}
// end up
for (i = 0; i < 2; i++) {
data = Reader.reverseInt(m_endUp[i]);
fos.write(data);
}
}
catch (Exception e) {
}
}
public void test() {
System.out.println();
out("===stage===");
out("controlType:" + m_controlType);
out("time:" + m_totalTime);
out("posRefer:" + m_posRefer);
out("posStyle:" + m_posStyle);
out("lookatRefer:" + m_lookatRefer);
out("lookatStyle:" + m_lookatStyle);
out("startPos:" + m_startPos[0] + "," + m_startPos[1] + "," + m_startPos[2]);
out("startLookat:" + m_startLookat[0] + "," + m_startLookat[1] + "," +
m_startLookat[2]);
out("startUp:" + m_startUp[0] + "," + m_startUp[1]);
out("endPos:" + m_endPos[0] + "," + m_endPos[1] + "," + m_endPos[2]);
out("endLookat:" + m_endLookat[0] + "," + m_endLookat[1] + "," +
m_endLookat[2]);
out("endUp:" + m_endUp[0] + "," + m_endUp[1]);
out("startRate:"+m_startDist+", endRate:"+m_endDist);
}
private void out(String st) {
System.out.println(st);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -