mobi.shad.s3lib.gfx.effect.TopBorder.java Source code

Java tutorial

Introduction

Here is the source code for mobi.shad.s3lib.gfx.effect.TopBorder.java

Source

/*******************************************************************************
 * Copyright 2012
 *
 * Jaroslaw Czub
 * http://shad.mobi
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 ******************************************************************************/
package mobi.shad.s3lib.gfx.effect;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.utils.ArrayMap;
import com.badlogic.gdx.utils.Json;
import com.badlogic.gdx.utils.JsonValue;
import mobi.shad.s3lib.gfx.util.GradientUtil;
import mobi.shad.s3lib.main.S3Constans;
import mobi.shad.s3lib.main.S3Gfx;
import mobi.shad.s3lib.main.S3Math;

import java.util.ArrayList;

/**
 * @author Jarek
 */
public class TopBorder extends AbstractEffect {

    private Texture texture = new Texture(1, 1, Pixmap.Format.RGBA4444);
    private int sizeTop = 30;
    private int sizeBorder = 1;
    private Color colorTop = Color.BLACK;
    private int colorBorder = 0;
    private float borderSpeed = 1;
    private float borderAngle = 0;
    private float stepLocal = 0;
    private float angle = 0;
    private Color color;
    private Pixmap pixmap;
    private float borderMultiply = 0;
    private boolean disableChange;

    /**
     *
     */
    public TopBorder() {
        init();
    }

    /**
     * @param random
     */
    public TopBorder(boolean random) {
        this();
    }

    /**
     *
     */
    @Override
    public final void init() {

        if (pixmap == null) {
            pixmap = new Pixmap(S3Constans.proceduralTextureSize, 1, Pixmap.Format.RGBA8888);
            pixmap.setColor(1, 1, 1, 1);
            pixmap.fill();
            texture = new Texture(pixmap);
        }
    }

    /**
     *
     */
    @Override
    public void start() {
    }

    /**
     *
     */
    @Override
    public void stop() {
    }

    /**
     *
     */
    @Override
    public void update(float effectTime, float sceneTime, float endTime, float procent, boolean isPause) {

        if (isPause) {
            return;
        }

        float pos = effectTime * borderSpeed * 2;
        for (int i = 0; i < S3Constans.proceduralTextureSize; ++i) {
            stepLocal = i * borderMultiply;
            angle = (pos + stepLocal) * S3Math.DIV_PI2_360;
            color = GradientUtil.getColorPallete(0.5f + S3Math.fastSin(angle) * 0.5f, colorBorder);
            pixmap.drawPixel(i, 0, Color.rgba8888(color.r, color.g, color.b, color.a));
        }
        texture.draw(pixmap, 0, 0);
    }

    /**
     *
     */
    @Override
    public void preRender() {
    }

    /**
     *
     * @param batch
     * @param parentAlpha
     */
    @Override
    public void render(Batch batch, float parentAlpha) {
        final float startX = parentActor.getX();
        final float startY = parentActor.getY();
        final float width = parentActor.getWidth();
        final float height = parentActor.getHeight();
        final float endX = startX + width;
        final float endY = startY + height;
        final float widthDiv2 = parentActor.getWidth() / 2;
        final float heightDiv2 = parentActor.getHeight() / 2;
        final float centerX = startX + widthDiv2;
        final float centerY = startY + heightDiv2;

        S3Gfx.drawBackground(colorTop, startX, endY - sizeTop, endX, endY);
        S3Gfx.drawBackground(texture, startX, endY - sizeTop + sizeBorder, endX, endY - sizeTop);

        S3Gfx.drawBackground(colorTop, startX, startY, endX, startY + sizeTop);
        S3Gfx.drawBackground(texture, startX, startY + sizeTop - sizeBorder, endX, startY + sizeTop);
    }

    /**
     *
     */
    @Override
    public void postRender() {
    }

    /**
     *
     * @param guiDef
     */
    @Override
    public void getGuiDefinition(ArrayList<String[]> guiDef) {

        guiDef.add(new String[] { "sizeTop", "sizeTop", "SPINNER_INT", "1.0" });
        guiDef.add(new String[] { "sizeBorder", "sizeBorder", "SPINNER_INT", "1.0" });
        guiDef.add(new String[] { "borderSpeed", "borderSpeed", "SPINNER", "1.0" });
        guiDef.add(new String[] { "borderMultiply", "borderMultiply", "SPINNER", "1.0" });

        guiDef.add(new String[] { "colorBorder", "colorBorder", "SPINNER_INT", "1" });

        guiDef.add(new String[] { "colorTop", "colorTop", "COLOR", "000000ff" });
    }

    /**
     *
     * @param values
     */
    @Override
    public void getValues(ArrayMap<String, String> values) {

        values.put("sizeTop", String.valueOf(sizeTop));
        values.put("sizeBorder", String.valueOf(sizeBorder));
        values.put("borderSpeed", String.valueOf(borderSpeed));
        values.put("borderMultiply", String.valueOf(borderMultiply));

        values.put("colorBorder", String.valueOf(colorBorder));

        values.put("colorTop", colorTop.toString());
    }

    /**
     *
     * @param changeKey
     * @param values
     */
    @Override
    public void setValues(String changeKey, ArrayMap<String, String> values) {

        sizeTop = Integer.parseInt(values.get("sizeTop"));
        sizeBorder = Integer.parseInt(values.get("sizeBorder"));
        borderSpeed = Float.parseFloat(values.get("borderSpeed"));
        borderMultiply = Float.parseFloat(values.get("borderMultiply"));

        colorBorder = Integer.parseInt(values.get("colorBorder"));
        if (colorBorder < 0) {
            colorBorder = 0;
        }

        colorTop = Color.valueOf(values.get("colorTop"));
    }

    /**
     *
     * @param json
     * @param jsonData
     */
    @Override
    public void read(Json json, JsonValue jsonData) {

        sizeTop = Integer.parseInt(jsonData.getString("sizeTop"));
        sizeBorder = Integer.parseInt(jsonData.getString("sizeBorder"));
        borderSpeed = Float.parseFloat(jsonData.getString("borderSpeed"));
        borderMultiply = Float.parseFloat(jsonData.getString("borderMultiply"));

        colorBorder = Integer.parseInt(jsonData.getString("colorBorder"));
        if (colorBorder < 0) {
            colorBorder = 0;
        }

        colorTop = Color.valueOf(jsonData.getString("colorTop"));
    }

    /**
     *
     * @param json
     * @param objectWrite
     */
    @Override
    public void write(Json json, Object objectWrite) {
        json.writeValue("sizeTop", sizeTop);
        json.writeValue("sizeBorder", sizeBorder);
        json.writeValue("borderSpeed", borderSpeed);
        json.writeValue("borderMultiply", borderMultiply);

        json.writeValue("colorBorder", colorBorder);

        json.writeValue("colorTop", colorTop.toString());
    }
}