aphelion.client.graphics.screen.NiftyCameraImpl.java Source code

Java tutorial

Introduction

Here is the source code for aphelion.client.graphics.screen.NiftyCameraImpl.java

Source

/*
 * Aphelion
 * Copyright (c) 2013  Joris van der Wel
 * 
 * This file is part of Aphelion
 * 
 * Aphelion is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, version 3 of the License.
 * 
 * Aphelion 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 Affero General Public License
 * along with Aphelion.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * In addition, the following supplemental terms apply, based on section 7 of
 * the GNU Affero General Public License (version 3):
 * a) Preservation of all legal notices and author attributions
 * b) Prohibition of misrepresentation of the origin of this material, and
 * modified versions are required to be marked in reasonable ways as
 * different from the original version (for example by appending a copyright notice).
 * 
 * Linking this library statically or dynamically with other modules is making a
 * combined work based on this library. Thus, the terms and conditions of the
 * GNU Affero General Public License cover the whole combination.
 * 
 * As a special exception, the copyright holders of this library give you 
 * permission to link this library with independent modules to produce an 
 * executable, regardless of the license terms of these independent modules,
 * and to copy and distribute the resulting executable under terms of your 
 * choice, provided that you also meet, for each linked independent module,
 * the terms and conditions of the license of that module. An independent
 * module is a module which is not derived from or based on this library.
 */

package aphelion.client.graphics.screen;

import aphelion.client.RENDER_LAYER;
import aphelion.client.graphics.world.MapEntities;
import aphelion.client.graphics.world.StarField;
import aphelion.shared.map.MapClassic;
import aphelion.shared.map.tile.TileType;
import aphelion.shared.resource.ResourceDB;
import aphelion.shared.swissarmyknife.Point;
import javax.annotation.Nonnull;
import org.lwjgl.opengl.GL11;

/**
 *
 * @author Joris
 */
public class NiftyCameraImpl implements CameraNiftyController.CameraForNifty {
    private final ResourceDB resourceDB;
    private final MapEntities mapEntities;
    private final MapClassic mapClassic;
    private final StarField stars;
    private final Point defaultCameraPosition = new Point(8192, 8192);

    public NiftyCameraImpl(@Nonnull ResourceDB resourceDB, @Nonnull MapEntities mapEntities,
            @Nonnull MapClassic mapClassic, @Nonnull StarField stars) {
        this.resourceDB = resourceDB;
        this.mapEntities = mapEntities;
        this.mapClassic = mapClassic;
        this.stars = stars;
    }

    @Override
    public ResourceDB getResourceDB() {
        return resourceDB;
    }

    public void setDefaultCameraPosition(@Nonnull Point point) {
        defaultCameraPosition.set(point);
    }

    public void setDefaultCameraPosition(float x, float y) {
        defaultCameraPosition.set(x, y);
    }

    @Override
    public void renderCamera(@Nonnull Camera camera, boolean renderStars) {
        GL11.glColor3f(1, 1, 1);

        camera.setPosition(defaultCameraPosition);
        camera.clipPosition(0, 0, 1024 * 16, 1024 * 16);

        if (renderStars) {
            stars.render(camera);
        }

        camera.renderEntities(mapEntities.animations(RENDER_LAYER.BACKGROUND, camera));
        camera.renderTiles(mapClassic, TileType.TILE_LAYER.PLAIN);
        // rendered in a seperate iteration so that we do not have to switch between textures as often
        // (tile set is one big texture)
        camera.renderTiles(mapClassic, TileType.TILE_LAYER.ANIMATED);
        camera.renderEntities(mapEntities.animations(RENDER_LAYER.AFTER_TILES, camera));
        camera.renderEntities(mapEntities.projectiles(false));
        camera.renderEntities(mapEntities.animations(RENDER_LAYER.AFTER_PROJECTILES, camera));
        camera.renderEntities(mapEntities.shipsNoLocal());
        camera.renderEntities(mapEntities.animations(RENDER_LAYER.AFTER_SHIPS, camera));
        camera.renderEntity(mapEntities.getLocalShip());
        camera.renderTiles(mapClassic, TileType.TILE_LAYER.PLAIN_OVER_SHIP);
        camera.renderEntities(mapEntities.animations(RENDER_LAYER.AFTER_LOCAL_SHIP, camera));
    }

}