import java.util.ArrayList; /** * This defines the renderable shape of objects such as triangles, squares, etc. * The Shape is defined via a list of vertices (x,y coordinates -> x,y) * SpaceSpiel can read these vertices in the renderObject method and render the object. * @author vanitas * */ public class Shape { //Lists containing the vertices' x and y coordinates private ArrayList x; private ArrayList y; private float size; //the color of the shape private float[] color; //Template IDs public static final int S_SHIP = 0001; public static final int S_TURRET = 0002; public static final int S_ITEM = 0003; public static final int S_METROID = 0004; public static final int S_BULLET = 0005; public static final int S_BUTTON = 0006; public static final int S_MENU = 0007; /** * Constructor */ public Shape() { //Initialize x = new ArrayList(); y = new ArrayList(); color = new float[]{1.0f,0.2f,0.2f}; } /** * Second constructor (Creates an Object from a template) * @param blueprint id of the template to create */ public Shape(int blueprint) { //Initialize x = new ArrayList(); y = new ArrayList(); //Fill with data this.createFromBlueprint(blueprint); } /** * Create a shape from a template * @param b id of the template */ public void createFromBlueprint(int b) { switch(b) { case S_SHIP: { //Create the shape of a ship x.add(0f); y.add(20f); //Spitze x.add(10f); y.add(-10f); //rechts hinten x.add(-10f); y.add(-10f); //links hinten this.setColor(1f, 0.2f, 0.2f); break; } case S_TURRET: { //Create the shape of a Turret x.add(-1f); y.add(10f); //Spitze x.add(1f); y.add(10f); x.add(5f); y.add(-5f); //rechts hinten x.add(-5f); y.add(-5f); //links hinten this.setColor(0.2f, 0.2f, 0.2f); break; } case S_BULLET: { //Create a bullet this.add(2.5f, 7.5f); this.add(-2.5f, 7.5f); this.add(-2.5f, -7.5f); this.add(2.5f, -7.5f); this.setColor(1f, 1f, 0f); break; } case S_MENU: { this.add(SpaceSpiel.frameSizeX/2, SpaceSpiel.frameSizeY/2); this.add(-SpaceSpiel.frameSizeX/2, SpaceSpiel.frameSizeY/2); this.add(-SpaceSpiel.frameSizeX/2, -SpaceSpiel.frameSizeY/2); this.add(SpaceSpiel.frameSizeX/2, -SpaceSpiel.frameSizeY/2); this.setColor(0f, 0f, 0f); break; } case S_BUTTON: //TODO: Mit dem Uhrzeigersinn { //create a Button this.add(100f, 15f); this.add(-0f, 15f); this.add(-0f, -15f); this.add(100f, -15f); this.setColor(1f, 1f, 1f); break; } case S_METROID: { this.add(4f, 7f); this.add(8f,0f); this.add(4f,-7f); this.add(-4f,-7f); this.add(-8f,0f); this.add(-4f,7f); this.setColor(0.15f, 0.15f, 0.15f); break; } default: this.setColor(0.2f, 0.2f, 0.2f); //TODO: Add shape of multiple ammunition types and items } } /** * Add a new vertex to the shape * @param nx * @param ny */ public void add(float nx, float ny) { this.x.add(nx); this.y.add(ny); } /** * Modify the vertex on position pos * @param pos position of the vertex * @param nx new x value * @param ny new y value */ public void modify(int pos, float nx, float ny) { this.x.set(pos, nx); this.y.set(pos, ny); } /** * return the x component of a specific vertex * @param pos position of the vertex in the list * @return x component */ public float getX(int pos) { return x.get(pos); } /** * return the y component of a specific vertex * @param pos position of the vertex in the list * @return y component */ public float getY(int pos) { return y.get(pos); } /** * returns the Length of the x list representative for how many vertices are in the list. * x.size() and y.size() should be equal all the time. * @return size of the arrays */ public int getLength() { return x.size(); } /** * set the color of the shape * @param r red * @param g green * @param b blue */ public void setColor(float r, float g, float b) { color = new float[3]; color[0]=r; color[1]=g; color[2]=b; } /** * returns the color of the shape * @return color */ public float[] getColor() { //System.out.println(""+color[0]+""+color[1]+""+color[2]); return color; } public void setSize(float s) { this.size = s; } public float getSize() { return this.size; } }