pl.kotcrab.jdialogue.editor.KotcrabText.java Source code

Java tutorial

Introduction

Here is the source code for pl.kotcrab.jdialogue.editor.KotcrabText.java

Source

/*******************************************************************************
 * DialogueEditor
 * Copyright (C) 2013-2014 Pawel Pastuszak
 * <p>
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * <p>
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * <p>
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ******************************************************************************/

package pl.kotcrab.jdialogue.editor;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.BitmapFont.TextBounds;
import com.badlogic.gdx.graphics.g2d.BitmapFontCache;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Matrix4;
import com.badlogic.gdx.math.Vector2;

/**
 * Text that you can scale, rotate, change color itp. Supports distance field fonts
 * @author Pawel Pastuszak
 */
public class KotcrabText {
    private Vector2 position; // pozycja
    private Vector2 origin; // origin
    private Vector2 scale; // skala

    private float rotation; // rotacja

    private Color color; // kolor

    private BitmapFontCache bitmapFontCache;

    private TextBounds textBounds;

    private boolean autoSetOriginToMiddle; // automatyczne ustawianie originiu

    private Matrix4 oldMatrix; // stary matrix do przeksztalcen
    private Matrix4 newMatrix; // nowy matrix do przeksztalcen

    // konstruktor
    public KotcrabText(BitmapFont bitmapFont, String text, boolean alwaysSetOriginToMiddle, float x, float y) {
        bitmapFontCache = new BitmapFontCache(bitmapFont); // przygotowanie tekstu
        textBounds = bitmapFontCache.setText(text, 0, 0);

        position = new Vector2(x, y); // ustawienie pozycji
        scale = new Vector2(1, 1); // ustaiwnie skali
        rotation = 0; // ustawienie rotacji

        autoSetOriginToMiddle = alwaysSetOriginToMiddle; // config automatycznego origina

        if (autoSetOriginToMiddle == true) {
            calculateOrigin(); // obliczenie wlasciwego origina
        } else
            origin = new Vector2(0, 0); // ustawienie orgina na 0

        color = new Color(); // kolor
        newMatrix = new Matrix4(); // matrix

        translate();
    }

    public void draw(SpriteBatch spriteBatch) // render tekstu
    {
        oldMatrix = spriteBatch.getTransformMatrix().cpy(); // kopia matrixa

        spriteBatch.setTransformMatrix(newMatrix); // ustawienie nowego matrixa do tekstu

        bitmapFontCache.draw(spriteBatch); // redner tekstu

        spriteBatch.setTransformMatrix(oldMatrix); // przywrocenie matrixa
    }

    private void translate() {
        newMatrix.idt(); // przeksztalcenie tekstu
        newMatrix.translate(position.x + origin.x, position.y + origin.y + bitmapFontCache.getBounds().height, 0);
        newMatrix.rotate(0, 0, 1, rotation);
        newMatrix.scale(scale.x, scale.y, 1);
        newMatrix.translate(-origin.x, -origin.y, 0);
    }

    public void setText(String text) {
        textBounds = bitmapFontCache.setText(text, 0, 0); // tak to musi byc 0 poniewaz pozycja jest ustalona podczas przeksztalanie matrixa (zobacz translate())

        if (autoSetOriginToMiddle) // wymagane poznowne obliczenie origina
            calculateOrigin();

        translate();
    }

    public void setWrappedText(String text, float wrapWidth) {
        textBounds = bitmapFontCache.setWrappedText(text, 0, 0, wrapWidth);

        if (autoSetOriginToMiddle)
            calculateOrigin();

        translate();
    }

    protected void calculateOrigin() {
        origin = new Vector2(textBounds.width / 2, -textBounds.height / 2);
    }

    // Getter and setter
    public Vector2 getPosition() {
        return position;
    }

    public void setPosition(Vector2 newPosition) {
        position = newPosition;

        translate();
    }

    public void setPosition(float x, float y) {
        position.set(x, y);

        translate();
    }

    public void setX(float x) {
        position.x = x;

        translate();
    }

    public void setY(float y) {
        position.y = y;

        translate();
    }

    public Vector2 getOrigin() {
        return origin;
    }

    public void setOrigin(Vector2 newOrigin) {
        origin = newOrigin;

        translate();
    }

    public void setOrigin(float x, float y) {
        origin.set(x, y);

        translate();
    }

    public Vector2 getScale() {
        return scale;
    }

    public void setScale(Vector2 newScale) {
        scale = newScale;

        translate();
    }

    public void setScale(float x, float y) {
        scale.set(x, y);

        translate();
    }

    public void setScale(float XY) {
        scale.set(XY, XY);

        translate();
    }

    public float getRotation() {
        return rotation;
    }

    public void setRotation(float rotation) {
        this.rotation = rotation;

        translate();
    }

    public Color getColor() {
        return color;
    }

    public void setColor(float r, float g, float b, float a) {
        color.r = r;
        color.g = g;
        color.b = b;
        color.a = a;
        bitmapFontCache.setColor(color.r, color.g, color.b, color.a); // ustawienie koloru
    }

    public TextBounds getTextBounds() {
        return textBounds;
    }

    public BitmapFontCache getBitmapFontCache() {
        return bitmapFontCache;
    }

    public void center(int scrWidth) {
        position.x = (scrWidth - textBounds.width * scale.x) / 2;
        translate();
    }
}