package fr.tchocolate.qbe;
import org.lwjgl.util.Point;
import static org.lwjgl.opengl.GL11.*;
public class FontManager {
private static float FONT_SIZE = 16F;
private static float TEXTURE_SIZE = 256F;
public static void drawString(int x, int y, String s){
int lastx = x;
for(int i = 0; i<s.length(); i++){
char c = s.charAt(i);
int newx = lastx;
if(c == 't'){
newx += FONT_SIZE-3;
}else if(c == ' '){
newx += FONT_SIZE-7;
}else if(c == 'i'){
newx += FONT_SIZE-5;
}else{
newx += FONT_SIZE-1;
}
lastx = newx;
drawChar(getCharLocation(c), newx, y);
}
}
private static void drawChar(Point p, int x, int y){
float uvx = FONT_SIZE*(p.getX()-1);
float uvy = FONT_SIZE*(p.getY()-1);
float uvx2 = uvx+FONT_SIZE;
float uvy2 = uvy+FONT_SIZE;
uvx /= TEXTURE_SIZE;
uvy /= TEXTURE_SIZE;
uvx2 /= TEXTURE_SIZE;
uvy2 /= TEXTURE_SIZE;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, TextureManager.font.getTextureID());
glPushMatrix();
glBegin(GL_QUADS);
glTexCoord2f(uvx, uvy2); glVertex2f((float)x, (float)y);
glTexCoord2f(uvx2, uvy2); glVertex2f((float)x+FONT_SIZE, (float)y);
glTexCoord2f(uvx2, uvy); glVertex2f((float)x+FONT_SIZE, (float)y+FONT_SIZE);
glTexCoord2f(uvx, uvy); glVertex2f((float)x, (float)y+FONT_SIZE);
glEnd();
glPopMatrix();
glBindTexture(GL_TEXTURE_2D, 0);
}
private static Point getCharLocation(char c){
Point p = new Point(1, 11);
if(c > '0'-1 && c < '9'+1){//number
int x = 0, y = 4;
int diff = c-'0';
return new Point(x+diff+1, y);
}else if(c > 'A'-1 && c < 'O'+1){
int x = 1, y = 5;
int diff = c-'A';
return new Point(x+diff+1, y);
}else if(c > 'P'-1 && c < 'Z'+1){
int x = 0, y = 6;
int diff = c-'p';
return new Point(x+diff+1, y);
}else if(c > 'a'-1 && c < 'o'+1){
int x = 1, y = 7;
int diff = c-'a';
return new Point(x+diff+1, y);
}else if(c > 'p'-1 && c < 'z'+1){
int x = 0, y = 8;
int diff = c-'p';
return new Point(x+diff+1, y);
}else if(c == ' '){
return new Point(0, 0);
}
return p;
}
}