package br.com.etyllica.layer;
import java.awt.geom.AffineTransform;
import br.com.etyllica.core.Drawable;
import br.com.etyllica.core.collision.CollisionDetector;
import br.com.etyllica.core.event.PointerEvent;
import br.com.etyllica.core.graphics.Graphics;
/**
*
* @author yuripourre
*
*/
public class Layer extends GeometricLayer implements Drawable {
/**
* Opacity
*/
protected int opacity = 255;
/**
* Angle in degrees
*/
protected double angle = 0;
/**
* Reference point to scale and rotation
*/
protected float originX, originY;
/**
* Scale factors
*/
protected double scaleX = 1, scaleY = 1;
/**
* if layer is visible
*/
protected boolean visible = true;
public Layer() {
super();
}
public Layer(int x, int y) {
super();
this.x = x;
this.y = y;
}
public Layer(int x, int y, int w, int h) {
super(x,y,w,h);
}
public int getOpacity() {
return opacity;
}
/**
*
* @param opacity
*/
public void setOpacity(int opacity) {
this.opacity = opacity;
}
public double getAngle() {
return angle;
}
/**
*
* @param angle
*/
public void setAngle(double angle) {
this.angle = angle;
}
public float getOriginX() {
return originX;
}
public float getOriginY() {
return originY;
}
/**
*
* @param origin
*/
public void setOrigin(float originX, float originY) {
this.originX = originX;
this.originY = originY;
}
public void setOriginCenter() {
this.originX = utilWidth() / 2;
this.originY = utilHeight() / 2;
}
/**
*
* @param offset
*/
public void setOffsetAngle(double offset) {
setAngle(angle+offset);
}
public double getScaleX() {
return scaleX;
}
public double getScaleY() {
return scaleY;
}
/**
*
* @param scaleX
*/
public void setScaleX(double scaleX) {
this.scaleX = scaleX;
}
/**
*
* @param scaleY
*/
public void setScaleY(double scaleY) {
this.scaleY = scaleY;
}
public void setScale(double scale) {
this.scaleX = scale;
this.scaleY = scale;
}
/**
*
* @param visible
*/
public void setVisible(boolean visible) {
this.visible = visible;
}
public boolean isVisible() {
return visible;
}
/**
* Method to turn a Layer visible
*/
public void show() {
visible = true;
}
/**
* Method to turn a Layer invisible
*/
public void hide() {
visible = false;
}
public void swapVisible() {
visible = !visible;
}
/**
*
* @param event
* @return
*/
public boolean onMouse(PointerEvent event) {
return onMouse(event.getX(), event.getY());
}
/**
*
* @param mx
* @param my
* @return
*/
public boolean onMouse(int px, int py) {
return CollisionDetector.colideRectPoint(this, px, py);
}
public AffineTransform getTransform() {
return getTransform(0, 0);
}
public AffineTransform getTransform(float offsetX, float offsetY) {
final float px = getX();
final float py = getY();
AffineTransform transform = new AffineTransform();
transform.translate(px + originX, py + originY);
// Scale
if(scaleX != 1 || scaleY != 1) {
transform.scale(scaleX, scaleY);
}
// Rotate
if(angle != 0) {
transform.rotate(Math.toRadians(angle));
}
// Move to origin (centered)
transform.translate(-px - originX, -py - originY);
return transform;
}
@Override
public void draw(Graphics g) {
// TODO Auto-generated method stub
}
public void simpleDraw(Graphics g) {
// TODO Auto-generated method stub
}
public void copy(Layer layer) {
super.copy(layer);
setOrigin(layer.getOriginX(), layer.getOriginY());
setScaleX(layer.getScaleX());
setScaleY(layer.getScaleY());
setAngle(layer.getAngle());
setOpacity(layer.getOpacity());
}
}