com.lyeeedar.Roguelike3D.Graphics.Screens.AbstractScreen.java Source code

Java tutorial

Introduction

Here is the source code for com.lyeeedar.Roguelike3D.Graphics.Screens.AbstractScreen.java

Source

/*******************************************************************************
 * Copyright (c) 2013 Philip Collin.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Contributors:
 *     Philip Collin - initial API and implementation
 ******************************************************************************/
package com.lyeeedar.Roguelike3D.Graphics.Screens;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.FPSLogger;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.lyeeedar.Roguelike3D.Roguelike3DGame;
import com.lyeeedar.Roguelike3D.Game.GameData;
import com.lyeeedar.Roguelike3D.Graphics.Lights.LightManager;
import com.lyeeedar.Roguelike3D.Graphics.Renderers.DeferredRenderer;
import com.lyeeedar.Roguelike3D.Graphics.Renderers.ForwardRenderer;
import com.lyeeedar.Roguelike3D.Graphics.Renderers.Renderer;

public abstract class AbstractScreen implements Screen {

    int screen_width;
    int screen_height;

    protected final Roguelike3DGame game;

    protected final SpriteBatch spriteBatch;

    protected BitmapFont font;
    protected final Stage stage;

    protected Renderer renderer;

    PerspectiveCamera cam;

    FPSLogger fps = new FPSLogger();

    public AbstractScreen(Roguelike3DGame game) {
        this.game = game;

        font = new BitmapFont(Gdx.files.internal("data/skins/default.fnt"), false);
        spriteBatch = new SpriteBatch();

        stage = new Stage(0, 0, true, spriteBatch);
    }

    @Override
    public void render(float delta) {

        update(delta);
        stage.act(delta);

        Gdx.graphics.getGL20().glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        Gdx.graphics.getGL20().glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

        Gdx.graphics.getGL20().glEnable(GL20.GL_CULL_FACE);
        Gdx.graphics.getGL20().glCullFace(GL20.GL_BACK);

        Gdx.graphics.getGL20().glEnable(GL20.GL_DEPTH_TEST);
        Gdx.graphics.getGL20().glDepthMask(true);

        drawModels(delta);

        Gdx.graphics.getGL20().glDisable(GL20.GL_CULL_FACE);

        drawTransparent(delta);

        Gdx.graphics.getGL20().glDisable(GL20.GL_DEPTH_TEST);

        drawOrthogonals(delta);

        fps.log();

    }

    @Override
    public void resize(int width, int height) {

        System.out.println("Screen resized to " + width + " by " + height);

        width = GameData.resolution[0];
        height = GameData.resolution[1];

        screen_width = width;
        screen_height = height;

        cam = new PerspectiveCamera(75, width, height);
        cam.near = 1.5f;
        cam.far = 200f;

        stage.setViewport(width, height, true);

        if (renderer != null) {
            renderer.cam = cam;
            renderer.updateResolution();
        }
    }

    @Override
    public void dispose() {
        renderer.dispose();
        spriteBatch.dispose();
        font.dispose();
        stage.dispose();

        superDispose();

    }

    /**
     * Put all the creation of the objects used by the screen in here to avoid reloading everything on a screenswap
     */
    public abstract void create();

    /**
     * Draw models using {@link ForwardRenderer}. Everything drawn in this method will also be passed through the post-processor
     * @param delta
     */
    public abstract void drawModels(float delta);

    /**
     * Draw decals here. Everything drawn in this method will also be passed through the post-processor
     * @param delta
     */
    public abstract void drawTransparent(float delta);

    /**
     * Draw sprites using sprite batch. Everything drawn here will NOT be post-processed
     * @param delta
     */
    public abstract void drawOrthogonals(float delta);

    /**
     * Update game logic
     * @param delta
     */
    public abstract void update(float delta);

    public abstract void superDispose();

}