package loon.core;
import loon.LSystem;
import loon.action.map.Config;
import loon.core.geom.RectBox;
import loon.core.geom.Vector2f;
import loon.utils.MathUtils;
/**
* Copyright 2008 - 2011
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
* @project loon
* @author cping
* @email:javachenpeng@yahoo.com
* @version 0.1
*/
public abstract class LObject {
public Object Tag;
public float alpha = 1f;
protected RectBox rect;
protected String name;
protected Vector2f location = new Vector2f(0, 0);
protected int layer;
protected float rotation;
public void setTransparency(int alpha) {
setAlpha(alpha / 255f);
}
public int getTransparency() {
return (int) (alpha * 255);
}
public void setAlpha(float a) {
this.alpha = a;
}
public float getAlpha() {
return this.alpha;
}
public void setRotation(float r) {
this.rotation = r;
if (rect != null) {
rect = MathUtils.getBounds(location.x, location.y, getWidth(),
getHeight(), r, rect);
}
}
public float getRotation() {
return rotation;
}
public abstract void update(long elapsedTime);
public void centerOnScreen() {
LObject.centerOn(this, LSystem.screenRect.width,
LSystem.screenRect.height);
}
public void bottomOnScreen() {
LObject.bottomOn(this, LSystem.screenRect.width,
LSystem.screenRect.height);
}
public void leftOnScreen() {
LObject.leftOn(this, LSystem.screenRect.width,
LSystem.screenRect.height);
}
public void rightOnScreen() {
LObject.rightOn(this, LSystem.screenRect.width,
LSystem.screenRect.height);
}
public void topOnScreen() {
LObject.topOn(this, LSystem.screenRect.width, LSystem.screenRect.height);
}
public RectBox getCollisionArea() {
return getRect(getX(), getY(), getWidth(), getHeight());
}
protected RectBox getRect(float x, float y, float w, float h) {
if (rect == null) {
rect = new RectBox(x, y, w, h);
} else {
rect.setBounds(x, y, w, h);
}
return rect;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getLayer() {
return layer;
}
public void setLayer(int layer) {
this.layer = layer;
}
public void move_45D_up() {
move_45D_up(1);
}
public void move_45D_up(int multiples) {
location.move_multiples(Config.UP, multiples);
}
public void move_45D_left() {
move_45D_left(1);
}
public void move_45D_left(int multiples) {
location.move_multiples(Config.LEFT, multiples);
}
public void move_45D_right() {
move_45D_right(1);
}
public void move_45D_right(int multiples) {
location.move_multiples(Config.RIGHT, multiples);
}
public void move_45D_down() {
move_45D_down(1);
}
public void move_45D_down(int multiples) {
location.move_multiples(Config.DOWN, multiples);
}
public void move_up() {
move_up(1);
}
public void move_up(int multiples) {
location.move_multiples(Config.TUP, multiples);
}
public void move_left() {
move_left(1);
}
public void move_left(int multiples) {
location.move_multiples(Config.TLEFT, multiples);
}
public void move_right() {
move_right(1);
}
public void move_right(int multiples) {
location.move_multiples(Config.TRIGHT, multiples);
}
public void move_down() {
move_down(1);
}
public void move_down(int multiples) {
location.move_multiples(Config.TDOWN, multiples);
}
public void move(Vector2f vector2D) {
location.move(vector2D);
}
public void move(float x, float y) {
location.move(x, y);
}
public void setLocation(float x, float y) {
location.setLocation(x, y);
}
public int x() {
return (int) location.getX();
}
public int y() {
return (int) location.getY();
}
public float getX() {
return location.getX();
}
public float getY() {
return location.getY();
}
public void setX(Integer x) {
location.setX(x.intValue());
}
public void setX(float x) {
location.setX(x);
}
public void setY(Integer y) {
location.setY(y.intValue());
}
public void setY(float y) {
location.setY(y);
}
public Vector2f getLocation() {
return location;
}
public void setLocation(Vector2f location) {
this.location = location;
}
public static void centerOn(final LObject object, int w, int h) {
object.setLocation(w / 2 - object.getWidth() / 2,
h / 2 - object.getHeight() / 2);
}
public static void topOn(final LObject object, int w, int h) {
object.setLocation(w / 2 - h / 2, 0);
}
public static void leftOn(final LObject object, int w, int h) {
object.setLocation(0, h / 2 - object.getHeight() / 2);
}
public static void rightOn(final LObject object, int w, int h) {
object.setLocation(w - object.getWidth(), h / 2 - object.getHeight()
/ 2);
}
public static void bottomOn(final LObject object, int w, int h) {
object.setLocation(w / 2 - object.getWidth() / 2,
h - object.getHeight());
}
public void centerOn(final LObject object) {
centerOn(object, getWidth(), getHeight());
}
public void topOn(final LObject object) {
topOn(object, getWidth(), getHeight());
}
public void leftOn(final LObject object) {
leftOn(object, getWidth(), getHeight());
}
public void rightOn(final LObject object) {
rightOn(object, getWidth(), getHeight());
}
public void bottomOn(final LObject object) {
bottomOn(object, getWidth(), getHeight());
}
public abstract int getWidth();
public abstract int getHeight();
}