hoppy-girl/src/com/hkri/HoppyGirl/CrystalObstacles.java

111 lines
4.6 KiB
Java

package com.hkri.HoppyGirl;
import org.andengine.engine.Engine;
import org.andengine.entity.primitive.Rectangle;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.sprite.Sprite;
import org.andengine.opengl.texture.region.ITextureRegion;
/**
* (c) 2014 John Espiritu
* (c) 2014 hkri studios
*
* @author John Espiritu
* @since December 30, 2014
*
*/
public class CrystalObstacles {
//Crystal Regions
ITextureRegion crystalRegion1, crystalRegion2, crystalRegion3;
Sprite crystalSprite;
int currentCrystalType = -1;
//Passed flag
public boolean obstacleChecked = false;
//Game settings
Engine mEngine;
//Hit area
Rectangle[] hitArea = new Rectangle[4];
public CrystalObstacles(ITextureRegion c1, ITextureRegion c2, ITextureRegion c3, Engine ngn){
crystalRegion1 = c1; crystalRegion2 = c2; crystalRegion3 = c3;
mEngine = ngn;
}
public void disposeObject(Scene scn){
scn.detachChild(crystalSprite);
for(Rectangle rt : hitArea)
if(rt.isDisposed() == false )rt.dispose();
if(crystalSprite.isDisposed() == false )crystalSprite.dispose();
}
public void attachCrystal(Scene scn, float pX, float pYBottom, int crystalType){
hitArea = new Rectangle[4];
currentCrystalType = crystalType;
if(crystalType == 0) {
crystalSprite = new Sprite(pX, pYBottom, crystalRegion1, mEngine.getVertexBufferObjectManager());
hitArea[0] = new Rectangle(getX(), getY() + 19, 22, 64, mEngine.getVertexBufferObjectManager());
hitArea[1] = new Rectangle(getX() + 9, getY(), 6, 18, mEngine.getVertexBufferObjectManager());
hitArea[2] = new Rectangle(getX() + 5, getY() + 10, 14, 9, mEngine.getVertexBufferObjectManager());
hitArea[3] = new Rectangle(getX() + 2, getY() + 14, 18, 4, mEngine.getVertexBufferObjectManager());
}
else if(crystalType == 1) {
crystalSprite = new Sprite(pX, pYBottom, crystalRegion2, mEngine.getVertexBufferObjectManager());
hitArea[0] = new Rectangle(getX(), getY() + 18, 22, 34, mEngine.getVertexBufferObjectManager());
hitArea[1] = new Rectangle(getX() + 9, getY() + 1, 6, 18, mEngine.getVertexBufferObjectManager());
hitArea[2] = new Rectangle(getX() + 4, getY() + 10, 14, 8, mEngine.getVertexBufferObjectManager());
hitArea[3] = new Rectangle(getX() + 2, getY() + 14, 18, 4, mEngine.getVertexBufferObjectManager());
}
else if(crystalType == 2) {
crystalSprite = new Sprite(pX, pYBottom, crystalRegion3, mEngine.getVertexBufferObjectManager());
hitArea[0] = new Rectangle(getX() + 10, getY() + 30, 34, 46, mEngine.getVertexBufferObjectManager());
hitArea[1] = new Rectangle(getX() + 1, getY() + 44, 10, 32, mEngine.getVertexBufferObjectManager());
hitArea[2] = new Rectangle(getX() + 30, getY() + 0, 6, 35, mEngine.getVertexBufferObjectManager());
hitArea[3] = new Rectangle(getX() + 22, getY() + 14, 22, 20, mEngine.getVertexBufferObjectManager());
}
crystalSprite.setY(crystalSprite.getY() - crystalSprite.getHeight());
scn.attachChild(crystalSprite);
}
public Rectangle[] getCollidingRectangles(){
return hitArea;
}
private void updateColliderPosition(){
if(currentCrystalType == 0) {
hitArea[0].setPosition(getX(), getY() + 19);
hitArea[1].setPosition(getX() + 9, getY());
hitArea[2].setPosition(getX() + 5, getY() + 10);
hitArea[3].setPosition(getX() + 2, getY() + 14);
}
else if(currentCrystalType == 1) {
hitArea[0].setPosition(getX(), getY() + 18);
hitArea[1].setPosition(getX() + 9, getY() + 1);
hitArea[2].setPosition(getX() + 4, getY() + 10);
hitArea[3].setPosition(getX() + 2, getY() + 14);
}
else if(currentCrystalType == 2) {
hitArea[0].setPosition(getX() + 10, getY() + 30);
hitArea[1].setPosition(getX() + 1, getY() + 44);
hitArea[2].setPosition(getX() + 30, getY() + 0);
hitArea[3].setPosition(getX() + 22, getY() + 14);
}
}
public Sprite getSprite(){
return crystalSprite;
}
public void setX(float nval) { crystalSprite.setX(nval); updateColliderPosition(); }
public void setY(float nval) { crystalSprite.setY(nval); updateColliderPosition(); }
public float getX() { return crystalSprite.getX();}
public float getY() { return crystalSprite.getY();}
public float getW() { return crystalSprite.getWidth();}
public float getH() { return crystalSprite.getHeight();}
}