package ei.engine.scene; import java.awt.Rectangle; import org.lwjgl.opengl.GL11; import ei.engine.texture.Texture; import ei.engine.texture.TextureLoader; /** * Implementation of sprite that uses an OpenGL quad and a texture * to render a given image to the screen. * * @author Kevin Glass * @author Brian Matzon * @author Ziver Koc */ public class Sprite extends Entity { /** The texture that stores the image for this sprite */ private Texture texture; /** * Create a new empty sprite * * @param window The window in which the sprite will be displayed * @param ref A reference to the image on which this sprite should be based */ public Sprite(String name) { super(name); texture = null; } /** * Create a new sprite from a specified texture. * * @param name The name of the sprite * @param texture The texture to use */ public Sprite(String name, Texture texture) { super(name); this.texture = texture; } /** * Create a new sprite from a specified image. * * @param name The name of the sprite * @param ref A reference to the image on which this sprite should be based */ public Sprite(String name, String ref) { super(name); this.texture = TextureLoader.getTextureLoaderInstance().getTexture(ref); } /** * Get the width of this sprite in pixels * * @return The width of this sprite in pixels */ public int getWidth() { if(texture == null){ return 0; } return texture.getImageWidth(); } /** * Get the height of this sprite in pixels * * @return The height of this sprite in pixels */ public int getHeight() { if(texture == null){ return 0; } return texture.getImageHeight(); } /** * Returns the texture * @return The texture */ public Texture getTexture(){ return texture; } /** * Draw the sprite */ public void render() { // store the current model matrix GL11.glPushMatrix(); //Sets the location super.setTranslationGL(); //the rotation super.setRotationGL(texture.getImageWidth()/2,texture.getImageHeight()/2); //Sets the scale of the sprite super.setScaleGL(); // bind to the appropriate texture for this sprite texture.bindGL(); GL11.glColor3f(1,1,1); // draw a quad textured to match the sprite GL11.glBegin(GL11.GL_QUADS); { //Vertex at the upper left GL11.glTexCoord2f(0, 0); GL11.glVertex2f(0, 0); //Vertex at the down left GL11.glTexCoord2f(0, texture.getHeight()); GL11.glVertex2f(0, texture.getImageHeight()); //Vertex at the upper right GL11.glTexCoord2f(texture.getWidth(), texture.getHeight()); GL11.glVertex2f(texture.getImageWidth(),texture.getImageHeight()); //Vertex at the down right GL11.glTexCoord2f(texture.getWidth(), 0); GL11.glVertex2f(texture.getImageWidth(),0); } GL11.glEnd(); // restore the model view matrix to prevent contamination GL11.glPopMatrix(); } /** * Returns the bound of this class */ public Rectangle getBound() { return new Rectangle( (int)getLocation().getX(), (int)getLocation().getY(), texture.getImageWidth(), texture.getImageHeight()); } }