package views;
import entities.Pair;
import entities.config.GLConfigVariable;
import static org.lwjgl.opengl.GL11.*;
public class Image2D {
private int id;
private Pair<Double> spriteSize;
private Pair<Double> position;
private Color color;
private double rotation;
private double scale;
private double alpha;
public Image2D(Texture tex) {
if (tex != null)
this.id = tex.getId();
else
this.id = 0;
this.position = new Pair<>(0.0, 0.0);
this.color = new Color(1, 1, 1, 1);
if (tex != null)
spriteSize = new Pair<>((double) tex.getWidth(), (double) tex.getHeight());
else
spriteSize = new Pair<>(32d, 20d);
rotation = 0.0;
scale = 1.0;
alpha = 1.0;
}
public void setPosition(Pair<Double> position) {
this.position = position;
}
public void setScale(double scale) {
this.scale = scale;
}
public void draw() {
glBindTexture(GL_TEXTURE_2D, id);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); // 単位行列化
glTranslated(position.getLeft(), position.getRight(), 0); // 移動
glRotated(rotation, 0, 0, 1); // 回転
glScaled(scale, scale, 1); // 拡縮
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, GLConfigVariable.WIDTH, 0, GLConfigVariable.HEIGHT, -GLConfigVariable.DEPTH, GLConfigVariable.DEPTH); // 正射影投影
glViewport(0, 0, GLConfigVariable.WIDTH, GLConfigVariable.HEIGHT);
glColor4d(color.getR(), color.getG(), color.getB(), alpha);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2d(0, 0);
glVertex2d(-spriteSize.getLeft() / 2, spriteSize.getRight() / 2);
glTexCoord2d(0, 1);
glVertex2d(-spriteSize.getLeft() / 2, -spriteSize.getRight() / 2);
glTexCoord2d(1, 0);
glVertex2d(spriteSize.getLeft() / 2, spriteSize.getRight() / 2);
glTexCoord2d(1, 1);
glVertex2d(spriteSize.getLeft() / 2, -spriteSize.getRight() / 2);
glEnd();
glPopMatrix();
glBindTexture(GL_TEXTURE_2D, 0);
}
//---------------------------------------------------------------
}