123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- package eu.tankernn.gameEngine.loader.font;
- import org.lwjgl.util.vector.Vector2f;
- import org.lwjgl.util.vector.Vector3f;
- import eu.tankernn.gameEngine.loader.Loader;
- import eu.tankernn.gameEngine.renderEngine.Vao;
- /**
- * Represents a piece of text in the game.
- *
- * @author Karl
- *
- */
- public class GUIText {
- private String textString;
- private boolean dirty;
-
- private float fontSize;
- private Vao textMeshVao;
- private int vertexCount;
- private Vector3f colour = new Vector3f(0f, 0f, 0f);
- private Vector2f position;
- private float lineMaxSize;
- private int numberOfLines;
- private FontType font;
- private boolean centerText = false;
- /**
- * Creates a new text, loads the text's quads into a VAO, and adds the text
- * to the screen.
- *
- * @param text
- * - the text.
- * @param fontSize
- * - the font size of the text, where a font size of 1 is the
- * default size.
- * @param font
- * - the font that this text should use.
- * @param position
- * - the position on the screen where the top left corner of the
- * text should be rendered. The top left corner of the screen is
- * (0, 0) and the bottom right is (1, 1).
- * @param maxLineLength
- * - basically the width of the virtual page in terms of screen
- * width (1 is full screen width, 0.5 is half the width of the
- * screen, etc.) Text cannot go off the edge of the page, so if
- * the text is longer than this length it will go onto the next
- * line. When text is centered it is centered into the middle of
- * the line, based on this line length value.
- * @param centered
- * - whether the text should be centered or not.
- */
- public GUIText(String text, float fontSize, FontType font, Vector2f position, float maxLineLength,
- boolean centered) {
- this.textString = text;
- this.fontSize = fontSize;
- this.font = font;
- this.position = position;
- this.lineMaxSize = maxLineLength;
- this.centerText = centered;
- }
- /**
- * @return The font used by this text.
- */
- public FontType getFont() {
- return font;
- }
- /**
- * Set the colour of the text.
- *
- * @param r
- * - red value, between 0 and 1.
- * @param g
- * - green value, between 0 and 1.
- * @param b
- * - blue value, between 0 and 1.
- */
- public GUIText setColor(float r, float g, float b) {
- colour.set(r, g, b);
- return this;
- }
- /**
- * @return the colour of the text.
- */
- public Vector3f getColor() {
- return colour;
- }
- /**
- * @return The number of lines of text. This is determined when the text is
- * loaded, based on the length of the text and the max line length
- * that is set.
- */
- public int getNumberOfLines() {
- return numberOfLines;
- }
- /**
- * @return The position of the top-left corner of the text in screen-space.
- * (0, 0) is the top left corner of the screen, (1, 1) is the bottom
- * right.
- */
- public Vector2f getPosition() {
- return position;
- }
- /**
- * @return the ID of the text's VAO, which contains all the vertex data for
- * the quads on which the text will be rendered.
- */
- public Vao getMesh() {
- return textMeshVao;
- }
- /**
- * Set the VAO and vertex count for this text.
- *
- * @param vao
- * - the VAO containing all the vertex data for the quads on
- * which the text will be rendered.
- * @param verticesCount
- * - the total number of vertices in all of the quads.
- */
- public void setMeshInfo(Vao vao, int verticesCount) {
- this.textMeshVao = vao;
- this.vertexCount = verticesCount;
- }
- /**
- * @return The total number of vertices of all the text's quads.
- */
- public int getVertexCount() {
- return this.vertexCount;
- }
- /**
- * @return the font size of the text (a font size of 1 is normal).
- */
- protected float getFontSize() {
- return fontSize;
- }
- /**
- * Sets the number of lines that this text covers (method used only in
- * loading).
- *
- * @param number
- */
- protected void setNumberOfLines(int number) {
- this.numberOfLines = number;
- }
- /**
- * @return {@code true} if the text should be centered.
- */
- protected boolean isCentered() {
- return centerText;
- }
- /**
- * @return The maximum length of a line of this text.
- */
- protected float getMaxLineSize() {
- return lineMaxSize;
- }
- /**
- * @return The string of text.
- */
- protected String getTextString() {
- return textString;
- }
-
- public void setText(String text) {
- this.textString = text;
- this.dirty = true;
- }
-
- public boolean isDirty() {
- return this.dirty;
- }
-
- public void update(Loader loader) {
- TextMeshData data = font.loadText(this);
- Vao vao = loader.loadToVAO(data.getVertexPositions(), data.getTextureCoords());
- this.setMeshInfo(vao, data.getVertexCount());
- }
- }
|