⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stage.java

📁 liu7788414
💻 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 + -