/* Copyright (c) 2014 Jesper Öqvist <jesper@llbit.se>
*
* This file is part of Chunky.
*
* Chunky 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.
*
* Chunky 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 Chunky. If not, see <http://www.gnu.org/licenses/>.
*/
package se.llbit.chunky.renderer.scene;
import javafx.scene.image.Image;
import se.llbit.chunky.renderer.projection.ProjectionMode;
import se.llbit.chunky.world.Icon;
/**
* Camera presets.
*
* @author Jesper Öqvist <jesper@llbit.se>
*/
public enum CameraPreset {
ISO_WEST_NORTH("Isometric West-North", Icon.isoWN.fxImage(), -Math.PI / 4, -Math.PI / 4) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PARALLEL);
}
},
ISO_NORTH_EAST("Isometric North-East", Icon.isoNE.fxImage(), -3 * Math.PI / 4, -Math.PI / 4) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PARALLEL);
}
},
ISO_EAST_SOUTH("Isometric East-South", Icon.isoES.fxImage(), -5 * Math.PI / 4, -Math.PI / 4) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PARALLEL);
}
},
ISO_SOUTH_WEST("Isometric South-West", Icon.isoSW.fxImage(), -7 * Math.PI / 4, -Math.PI / 4) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PARALLEL);
}
},
SKYBOX_RIGHT("Skybox Right", Icon.skyboxRight.fxImage(), Math.PI, -Math.PI / 2) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PINHOLE);
camera.setFoV(90);
}
},
SKYBOX_LEFT("Skybox Left", Icon.skyboxLeft.fxImage(), 0, -Math.PI / 2) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PINHOLE);
camera.setFoV(90);
}
},
SKYBOX_UP("Skybox Up", Icon.skyboxUp.fxImage(), -Math.PI / 2, Math.PI) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PINHOLE);
camera.setFoV(90);
}
},
SKYBOX_DOWN("Skybox Down", Icon.skyboxDown.fxImage(), -Math.PI / 2, 0) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PINHOLE);
camera.setFoV(90);
}
},
SKYBOX_FRONT("Skybox Front (North)", Icon.skyboxFront.fxImage(), -Math.PI / 2, -Math.PI / 2) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PINHOLE);
camera.setFoV(90);
}
},
SKYBOX_BACK("Skybox Back", Icon.skyboxBack.fxImage(), Math.PI / 2, -Math.PI / 2) {
@Override public void apply(Camera camera) {
camera.setView(yaw, pitch, 0);
camera.setProjectionMode(ProjectionMode.PINHOLE);
camera.setFoV(90);
}
};
protected final double yaw;
protected final double pitch;
private final String name;
private final Image icon;
CameraPreset(String name, Image icon, double yaw, double pitch) {
this.name = name;
this.icon = icon;
this.yaw = yaw;
this.pitch = pitch;
}
@Override public String toString() {
return name;
}
/**
* Applies a preset to a camera.
*/
abstract public void apply(Camera camera);
public Image getIcon() {
return icon;
}
}