content: package com.gamatechno.vrlib;
  
  import com.gamatechno.vrlib.model.position.MDMutablePosition;
  
  /**
   * Created by hzqiujiadi on 2017/5/10.
   * hzqiujiadi ashqalcn@gmail.com
   */
  
  public class MDDirectorCamera {
  
      private boolean mPositionValidate;
      private float mEyeX = 0f;
      private float mEyeY = 0f;
      private float mEyeZ = 0f;
      private float mLookX = 0f;
      private float mLookY = 0f;
  
      private boolean mProjectionValidate;
      private float mNearScale = 1f;
      private float mRatio = 1.5f;
      private int mViewportWidth = 2;
      private int mViewportHeight = 1;
  
      private boolean mRotationValidate;
      private final MDMutablePosition mRotation = MDMutablePosition.newInstance();
  
  
      MDDirectorCamera setLookX(float mLookX) {
          this.mLookX = mLookX;
          mPositionValidate = true;
          return this;
      }
  
      MDDirectorCamera setLookY(float mLookY) {
          this.mLookY = mLookY;
          mPositionValidate = true;
          return this;
      }
  
      MDDirectorCamera setEyeX(float mEyeX) {
          this.mEyeX = mEyeX;
          mPositionValidate = true;
          return this;
      }
  
      MDDirectorCamera setEyeY(float mEyeY) {
          this.mEyeY = mEyeY;
          mPositionValidate = true;
          return this;
      }
  
      MDDirectorCamera setEyeZ(float mEyeZ) {
          this.mEyeZ = mEyeZ;
          mPositionValidate = true;
          return this;
      }
  
      float getEyeX() {
          return mEyeX;
      }
  
      float getEyeY() {
          return mEyeY;
      }
  
      float getEyeZ() {
          return mEyeZ;
      }
  
      float getLookX() {
          return mLookX;
      }
  
      float getLookY() {
          return mLookY;
      }
  
      float getNearScale() {
          return mNearScale;
      }
  
      MDDirectorCamera setNearScale(float scale) {
          this.mNearScale = scale;
          mProjectionValidate = true;
          return this;
      }
  
      MDDirectorCamera setRoll(float roll){
          mRotation.setRoll(roll);
          mRotationValidate = true;
          return this;
      }
  
      MDDirectorCamera setPitch(float pitch){
          mRotation.setPitch(pitch);
          mRotationValidate = true;
          return this;
      }
  
      MDDirectorCamera setYaw(float yaw){
          mRotation.setYaw(yaw);
          mRotationValidate = true;
          return this;
      }
  
      float getPitch() {
          return mRotation.getPitch();
      }
  
      float getYaw() {
          return mRotation.getYaw();
      }
  
      float getRoll() {
          return mRotation.getRoll();
      }
  
      MDDirectorCamera updateViewport(int width, int height){
          mViewportWidth = width;
          mViewportHeight = height;
          mRatio = width * 1.0f / height;
          mProjectionValidate = true;
          return this;
      }
  
      float getRatio() {
          return mRatio;
      }
  
      int getViewportWidth() {
          return mViewportWidth;
      }
  
      int getViewportHeight() {
          return mViewportHeight;
      }
  
      boolean isRotationValidate() {
          return mRotationValidate;
      }
  
      public boolean isPositionValidate() {
          return mPositionValidate;
      }
  
      public boolean isProjectionValidate() {
          return mProjectionValidate;
      }
  
      public void consumePositionValidate() {
          mPositionValidate = false;
      }
  
      public void consumeProjectionValidate() {
          mProjectionValidate = false;
      }
  
      public void consumeRotationValidate() {
          mRotationValidate = false;
      }
  }
  