package com.ptrprograms.asteroidbelttv.Objects;
import com.ptrprograms.asteroidbelttv.Utils.Constants;
import com.ptrprograms.asteroidbelttv.Utils.ShapeBuffer;
import com.ptrprograms.asteroidbelttv.Utils.Utils;
/**
* Created by PaulTR on 7/20/14.
*/
public class Asteroid {
public float mAsteroidSize;
private Utils.Color mColor = new Utils.Color();
private float mVelocityX;
private float mVelocityY;
private float mVelocityMultiplier = 0.8f;
public float mPositionX;
public float mPositionY;
public Asteroid( Utils.Color color, float asteroidSize ) {
mColor.set( color );
setRandomStartingPosition();
setRandomVelocities();
mAsteroidSize = asteroidSize;
}
public Asteroid( Utils.Color color, float asteroidSize, float positionX, float positionY ) {
mPositionX = positionX;
mPositionY = positionY;
setRandomVelocities();
mAsteroidSize = asteroidSize;
mColor.set( color );
}
public void setRandomVelocities() {
setVelocityX( (float) Math.random() );
setVelocityY( (float) Math.random() );
}
public void setRandomStartingPosition() {
mPositionX = (float) Math.random() * Constants.MAP_RIGHT_COORDINATE;
if( Math.random() < 0.5 )
mPositionX = -mPositionX;
mPositionY = (float) Math.random() * Constants.MAP_TOP_COORDINATE;
if( Math.random() < 0.5 )
mPositionY = -mPositionY;
}
public void setVelocityX( float vel ) {
mVelocityX = vel * mVelocityMultiplier;
}
public void setVelocityY( float vel ) {
mVelocityY = vel * mVelocityMultiplier;
}
public void draw( ShapeBuffer sb ) {
sb.add2DShape( mPositionX, mPositionY, mColor, getAsteroidVerticies(), mAsteroidSize, mAsteroidSize, 0, 0 );
}
private float[] getAsteroidVerticies() {
float vertices[] = new float[ 361*3 ];
vertices[0] = 0;
vertices[1] = 0;
vertices[2] = 0;
for(int i = 1; i < 361; i++){
vertices[(i * 3)] = (float) ( Math.cos((3.14/180) * (float)i ) + vertices[0]);
vertices[(i * 3)+ 1] = (float) ( Math.sin((3.14/180) * (float)i ) + vertices[1]);
vertices[(i * 3)+ 2] = 0;
}
return vertices;
}
public void update( float delta ) {
setPositionX( mPositionX + ( mVelocityX * delta ) );
setPositionY( mPositionY + ( mVelocityY * delta ) );
}
public void setPositionX( float position ) {
if( Utils.isInXPlane( position, mAsteroidSize ) ) {
mPositionX = position;
} else if( Utils.isOffScreenToRight( position, mAsteroidSize ) ) {
mPositionX = Constants.MAP_LEFT_COORDINATE;
} else if( Utils.isOffScreenToLeft( position, mAsteroidSize ) ) {
mPositionX = Constants.MAP_RIGHT_COORDINATE;
}
}
public void setPositionY( float position ) {
if( Utils.isInYPlane( position, mAsteroidSize ) ) {
mPositionY = position;
} else if( Utils.isOffScreenAboveTop( position, mAsteroidSize ) ) {
mPositionY = Constants.MAP_BOTTOM_COORDINATE;
} else if( Utils.isOffScreenBelowBottom( position, mAsteroidSize ) ) {
mPositionY = Constants.MAP_TOP_COORDINATE;
}
}
}