io.github.minecraftgui.controllers.Render.java Source code

Java tutorial

Introduction

Here is the source code for io.github.minecraftgui.controllers.Render.java

Source

/*
 *     Minecraft GUI mod
 *     Copyright (C) 2015  Samuel Marchildon-Lavoie
 *
 *     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.
 *
 *     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.
 *
 *     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 io.github.minecraftgui.controllers;

import io.github.minecraftgui.views.ModInterface;
import org.lwjgl.opengl.GL11;
import org.newdawn.slick.opengl.Texture;

import java.awt.*;

public class Render {

    private final ModInterface modInterface;

    public Render(ModInterface modInterface) {
        this.modInterface = modInterface;
    }

    public void drawOval(int x, int y, int width, int height, Color color) {
        if (color.getAlpha() != 0) {
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glColor4f((color.getRed() / 255.0f), (color.getGreen() / 255.0f), (color.getBlue() / 255.0f),
                    (color.getAlpha() / 255.0f));

            GL11.glBegin(GL11.GL_POINTS);
            {
                for (double angle = 0; angle <= 90; angle += .5) {
                    double xLoc = x + width * Math.cos(angle * (Math.PI / 180));
                    double yLoc = y + height * Math.sin(angle * (Math.PI / 180));
                    double distanceY = yLoc - y;
                    double distanceX = xLoc - x;
                    GL11.glVertex2d(xLoc - distanceX * 2, yLoc - (distanceY) * 2);

                    GL11.glVertex2d(xLoc - distanceX * 2, yLoc - (distanceY) * 2 + distanceY * 2);

                    GL11.glVertex2d(xLoc + 1, yLoc - (distanceY) * 2 + distanceY * 2);

                    GL11.glVertex2d(xLoc + 1, yLoc - (distanceY) * 2);
                }
            }
            GL11.glEnd();

            GL11.glEnable(GL11.GL_TEXTURE_2D);
        }
    }

    public void fillOval(double x0, double y0, double width, double height, Color color) {
        if (color.getAlpha() != 0) {
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glColor4f((color.getRed() / 255.0f), (color.getGreen() / 255.0f), (color.getBlue() / 255.0f),
                    (color.getAlpha() / 255.0f));

            GL11.glBegin(GL11.GL_POLYGON);
            {
                for (int i = 360; 0 <= i; i -= 2)
                    GL11.glVertex2d(x0 + width * Math.cos(i * (Math.PI / 180)),
                            y0 + height * Math.sin(i * (Math.PI / 180)));
            }
            GL11.glEnd();

            GL11.glEnable(GL11.GL_TEXTURE_2D);
        }
    }

    public void drawCustomPolygon(int[] x, int[] y, Color color) {
        if (color.getAlpha() != 0 && x.length == y.length) {
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glColor4f((color.getRed() / 255.0f), (color.getGreen() / 255.0f), (color.getBlue() / 255.0f),
                    (color.getAlpha() / 255.0f));

            GL11.glBegin(GL11.GL_LINES);
            {
                for (int i = 0; i < x.length; i++) {
                    if (i < x.length - 1) {
                        GL11.glVertex2f(x[i], y[i]);
                        GL11.glVertex2f(x[i + 1], y[i + 1]);
                    } else {
                        GL11.glVertex2f(x[i], y[i]);
                        GL11.glVertex2f(x[0], y[0]);
                    }
                }
            }
            GL11.glEnd();
            GL11.glEnable(GL11.GL_TEXTURE_2D);
        }
    }

    public void fillCustomPolygon(double x, double y, double[][] positions, Color color) {
        if (color.getAlpha() != 0) {
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glColor4f((color.getRed() / 255.0f), (color.getGreen() / 255.0f), (color.getBlue() / 255.0f),
                    (color.getAlpha() / 255.0f));

            GL11.glBegin(GL11.GL_POLYGON);
            {
                for (int i = 0; i < positions.length; i++)
                    GL11.glVertex2d(x + positions[i][0], y + positions[i][1]);
            }
            GL11.glEnd();
            GL11.glEnable(GL11.GL_TEXTURE_2D);
        }
    }

    public void drawLine(int x0, int y0, int x1, int y1, Color color) {
        if (color.getAlpha() != 0) {
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glColor4f((color.getRed() / 255.0f), (color.getGreen() / 255.0f), (color.getBlue() / 255.0f),
                    (color.getAlpha() / 255.0f));

            GL11.glBegin(GL11.GL_LINES);
            {
                GL11.glVertex2f(x0, y0);

                GL11.glVertex2f(x1, y1);
            }
            GL11.glEnd();
            GL11.glEnable(GL11.GL_TEXTURE_2D);
        }
    }

    public void fillRectangle(double x, double y, double width, double height, Color color) {
        if (color.getAlpha() != 0) {
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
            GL11.glColor4f((color.getRed() / 255.0f), (color.getGreen() / 255.0f), (color.getBlue() / 255.0f),
                    (color.getAlpha() / 255.0f));

            GL11.glBegin(GL11.GL_QUADS);
            {
                GL11.glVertex2d(x, y);

                GL11.glVertex2d(x, y + height);

                GL11.glVertex2d(x + width, y + height);

                GL11.glVertex2d(x + width, y);
            }
            GL11.glEnd();
            GL11.glEnable(GL11.GL_TEXTURE_2D);
        }
    }

    public void drawRectangle(double x, double y, double width, double height, Color color) {
        if (color.getAlpha() != 0) {
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

            GL11.glColor4f((color.getRed() / 255.0f), (color.getGreen() / 255.0f), (color.getBlue() / 255.0f),
                    (color.getAlpha() / 255.0f));

            GL11.glBegin(GL11.GL_LINES);
            {
                GL11.glVertex2d(x, y);
                GL11.glVertex2d(x, y + height);

                GL11.glVertex2d(x, y + height);
                GL11.glVertex2d(x + width, y + height);

                GL11.glVertex2d(x + width, y + height);
                GL11.glVertex2d(x + width, y);

                GL11.glVertex2d(x + width, y);
                GL11.glVertex2d(x, y);
            }
            GL11.glEnd();
            GL11.glEnable(GL11.GL_TEXTURE_2D);
        }
    }

    public void drawTexture(Texture texture, double x, double y, double width, double height) {
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture.getTextureID());
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

        GL11.glColor4f(1, 1, 1, 1);

        GL11.glBegin(GL11.GL_QUADS);
        {
            GL11.glTexCoord2f(0, 0);
            GL11.glVertex2d(x, y);

            GL11.glTexCoord2f(0, texture.getHeight());
            GL11.glVertex2d(x, y + height);

            GL11.glTexCoord2f(texture.getWidth(), texture.getHeight());
            GL11.glVertex2d(x + width, y + height);

            GL11.glTexCoord2f(texture.getWidth(), 0);
            GL11.glVertex2d(x + width, y);
        }
        GL11.glEnd();

        modInterface.bindMinecraftTextures();
    }

}