/*
* 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));
}
}