package info.u250.c2d.graphic.parallax;
import com.badlogic.gdx.input.GestureDetector;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Group;
/**
* This only make a group only via to the {@link SpriteParallaxLayerDrawable} .if you want to
* get full control , you can full access the background API.
* manual install the layers
* <pre>
final TextureAtlas bgAtlas = Engine.resource("bgAtlas",TextureAtlas.class);
rbg = new ParallaxGroup(480, 320, new Vector2(50,100), false);
rbg.addActor(new Image(new AdvanceSprite(bgAtlas.findRegion("bg") )));
rbg.addActor(new ParallaxLayer(rbg,new Image(new AdvanceSprite(bgAtlas.findRegion("cloud") )), new Vector2(0.5f,0),new Vector2(0,1000), new Vector2(0,70)));
rbg.addActor(new ParallaxLayer(rbg,new Image(new AdvanceSprite(bgAtlas.findRegion("front") )), new Vector2(1f,0),new Vector2(0,1000), new Vector2()));
* </pre>
*@author lycying@gmail.com
*/
public class ParallaxGroup extends Group{
class EveryFrameResult{
Vector2 speedTracker = new Vector2();
}
/**
* @param width The screenWith
* @param height The screenHeight
* @param speed A Vector2 attribute to point out the x and y speed
*/
public ParallaxGroup(float width,float height,Vector2 speed){
this.speed.set(speed);
this.setSize(width, height);
}
protected Vector2 speed = new Vector2();
private GestureDetector gestureDetector;
private ParallaxGroupGestureListener gestureListener;
private EveryFrameResult result = new EveryFrameResult();
public GestureDetector getGestureDetector(){
return this.gestureDetector;
}
public void setDefaultGestureDetector(ParallaxGroupGestureListener gestureListener){
this.gestureListener = gestureListener;
gestureDetector = new GestureDetector(20, 0.5f, 2, 0.15f,gestureListener );
}
public void setGestureDetector(GestureDetector gestureDetector,ParallaxGroupGestureListener gestureListener){
this.gestureDetector = gestureDetector;
this.gestureListener= gestureListener;
}
/**
* get the full speed of the background , include the x and y axis
*/
public Vector2 getSpeed(){
return this.speed;
}
public Vector2 getSpeedTracker(){
return result.speedTracker;
}
/**
* Dynamic change the speed
*/
public void setSpeed(float xSpeed,float ySpeed){
this.speed.set(xSpeed, ySpeed);
}
public EveryFrameResult getResult(){
return result;
}
@Override
public void act(float delta) {
if(null!=this.gestureListener){
this.gestureListener.update();
}
this.result.speedTracker.add(speed.x*delta,speed.y*delta);
super.act(delta);
}
}