Advertisement
dawrehxyz

Untitled

Aug 6th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.79 KB | None | 0 0
  1. public class Player extends MyObject
  2. {
  3.     private VertexArray vertexArray;
  4.     private final int POSITION_COMPONENT_COUNT = 3;
  5.     private final int TEXTURE_COMPONENT_COUNT = 2;
  6.     private final int STRIDE = (POSITION_COMPONENT_COUNT + TEXTURE_COMPONENT_COUNT) * Constants.BYTES_PER_FLOAT;
  7.     private int indicesCount;
  8.     private final ShortBuffer indices;
  9.  
  10.     private Vector3 worldMidPoint;
  11.     private Vector3 timeBasedVelocity;
  12.     private Vector3 initialVelocity;
  13.     private Vector3 radius;
  14.     private boolean playerRunningStatus;
  15.  
  16.     private float[] translationMatrix;
  17.     private float[] incrementalRotationMatrix;
  18.     private float incrementalRotationAngle;
  19.     private float[] directRotationMatrix;
  20.     private float directRotationAngle;
  21.  
  22.     public Player(Context context, int fileId)
  23.     {
  24.         InputStream path = context.getResources().openRawResource(fileId);
  25.         LoadOBJ OBJLoader = new LoadOBJ(true, false);
  26.         OBJFileData objFileData = OBJLoader.LoadData(path);
  27.  
  28.         radius = new Vector3((max.x - min.x)/2, (max.y - min.y)/2, (max.z - min.z)/2);
  29.         worldMidPoint = new Vector3(0, radius.y, 0);
  30.         initialVelocity = new Vector3(0, 0, -2.0f);
  31.        
  32.         //If I didn't multiply this vector with the time variable later on and set it to like -0.002f on the z axis it works fine.
  33.         timeBasedVelocity = new Vector3(0, 0, -2.0f);
  34.         playerRunningStatus = false;
  35.  
  36.         VerticesAndIndices VAI = RestructureData.GetVerticesAndIndices(objFileData);
  37.         indicesCount = VAI.Indices.length;
  38.         vertexArray = new VertexArray(VAI.Vertices);
  39.  
  40.         indices = ByteBuffer.
  41.                 allocateDirect(VAI.Indices.length * Constants.BYTES_PER_SHORT).
  42.                 order(ByteOrder.nativeOrder()).
  43.                 asShortBuffer();
  44.         indices.put(VAI.Indices);
  45.         indices.position(0);
  46.  
  47.         translationMatrix = new float[16];
  48.         directRotationMatrix = new float[16];
  49.         directRotationAngle = 0;
  50.         incrementalRotationMatrix = new float[16];
  51.         incrementalRotationAngle = 0;
  52.     }
  53.    
  54.     public void bindData(TextureShaderProgram program)
  55.     {
  56.         int dataOffset = 0;
  57.         vertexArray.setVertexAttribPointer(dataOffset, program.getPositionAttributeLocation(), POSITION_COMPONENT_COUNT, STRIDE);
  58.         dataOffset += POSITION_COMPONENT_COUNT;
  59.         vertexArray.setVertexAttribPointer(dataOffset, program.getTextureCoordinatesAttributeLocation(),
  60.                                             TEXTURE_COMPONENT_COUNT, STRIDE);
  61.     }
  62.  
  63.     public void draw()
  64.     {
  65.         GLES20.glDrawElements(GLES20.GL_TRIANGLES, indicesCount, GLES20.GL_UNSIGNED_SHORT, indices);
  66.     }
  67.  
  68.     public Vector3 getWorldMidPoint()
  69.     {
  70.         return new Vector3(worldMidPoint.x, worldMidPoint.y, worldMidPoint.z);
  71.     }
  72.  
  73.     public Vector3 getPlayerRadius()
  74.     {
  75.         return new Vector3(radius.x, radius.y, radius.z);
  76.     }
  77.  
  78.     public Vector3 getPlayerTimeBasedVelocity()
  79.     {
  80.         return new Vector3(timeBasedVelocity.x, timeBasedVelocity.y, timeBasedVelocity.z);
  81.     }
  82.  
  83.     public boolean getPlayerRunningStatus()
  84.     {
  85.         return playerRunningStatus;
  86.     }
  87.  
  88.     public float[] getIncrementalRotationMatrix()
  89.     {
  90.         return incrementalRotationMatrix;
  91.     }
  92.  
  93.     public float getIncrementalRotationAngle()
  94.     {
  95.         return incrementalRotationAngle;
  96.     }
  97.  
  98.     private void setIncrementalRotationMatrix(float angle)
  99.     {
  100.         incrementalRotationAngle += angle;
  101.         Matrix.setIdentityM(incrementalRotationMatrix, 0);
  102.         Matrix.rotateM(incrementalRotationMatrix, 0, -incrementalRotationAngle, 0, 1, 0);
  103.     }
  104.  
  105.     private void setDirectRotationMatrix(float angle)
  106.     {
  107.         directRotationAngle = angle;
  108.         Matrix.setIdentityM(directRotationMatrix, 0);
  109.         Matrix.rotateM(directRotationMatrix, 0, -directRotationAngle, 0, 1, 0);
  110.     }
  111.  
  112.     private void setPlayerTimeBasedVelocity(float elapsedTime)
  113.     {
  114.         timeBasedVelocity.x = initialVelocity.x * elapsedTime;
  115.         timeBasedVelocity.y = initialVelocity.y * elapsedTime;
  116.         timeBasedVelocity.z = initialVelocity.z * elapsedTime;
  117.     }
  118.  
  119.     public void updatePlayerPosition(float elapsedTime)
  120.     {
  121.         float angle = MyOnTouchListener.getdx() / 5.0f;
  122.         setIncrementalRotationMatrix(angle);
  123.         setDirectRotationMatrix(angle);
  124.  
  125.         //Rotating the velocity vector
  126.         initialVelocity.rotateVectorBy4x4Matrix(directRotationMatrix);
  127.  
  128.         setPlayerTimeBasedVelocity(elapsedTime);
  129.  
  130.         if(MyOnTouchListener.getRunningStatus())
  131.         {
  132.  
  133.             playerRunningStatus = true;
  134.             worldMidPoint.addVector(timeBasedVelocity);
  135.         }
  136.         else
  137.         {
  138.             playerRunningStatus = false;
  139.         }
  140.         MyOnTouchListener.resetdx();
  141.         updatePlayerMinMax();
  142.     }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement