package com.shade.entities; import org.newdawn.slick.Graphics; import org.newdawn.slick.Image; import org.newdawn.slick.state.StateBasedGame; import com.crash.Body; import com.crash.util.CrashGeom; import com.shade.base.Entity; import com.shade.base.Level; import com.shade.crash.Repelable; import com.shade.levels.Model; import com.shade.lighting.LuminousEntity; abstract public class Obstacle extends Body implements LuminousEntity, Repelable{ public static int maxRank; protected Model model; protected int zindex; protected Image sprite; private int rank = -1; public int rank() { if (rank < 0) { calculateRank(); } return 1; // return rank; } private void calculateRank() { Basket b = (Basket) model.getEntitiesByRole(Roles.BASKET.ordinal())[0]; float distance = CrashGeom.distance2(this, b); rank = (int) Math.ceil(distance / 100); if (rank > 1 && this instanceof Fence) { rank--; } maxRank = Math.max(rank, maxRank); } public int getRole() { return Roles.OBSTACLE.ordinal(); } public void onCollision(Entity obstacle) { } public void render(StateBasedGame game, Graphics g) { sprite.draw(getX(), getY(), getWidth(), getHeight()); } public int getZIndex() { return zindex; } public float getLuminosity() { // not important for an obstacle return 0; } public void setLuminosity(float l) { // not important for an obstacle } public void addToLevel(Level<?> l) { model = (Model) l; } public void removeFromLevel(Level<?> l) { // not important for an obstacle } public int compareTo(LuminousEntity l) { return getZIndex() - l.getZIndex(); } }