/****************************************************************************** * Copyright (c) 2008 Marco Della Vedova, Matteo Foppiano * and Pimods contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.pixelinstrument.net/license/cpl-v10.html ******************************************************************************/ package net.sf.robocode.bv3d.camera; import javax.media.opengl.glu.GLU; import net.sf.robocode.bv3d.math.Vertex3f; import net.sf.robocode.bv3d.scenegraph.TransformationNode; /** * @author Marco Della Vedova - pixelinstrument.net * @author Matteo Foppiano - pixelinstrument.net * */ public class CameraManager { public static final int CAMERAANCHOR_CONTROLLER = 1; public static final int CAMERAANCHOR_FOLLOWER = 2; public static final int CAMERAANCHOR_TRACK = 3; private Camera camera; private CameraAnchor cameraAnchor; public CameraManager() { this.camera = new Camera(); this.setAnchor(CAMERAANCHOR_CONTROLLER); } public void refresh(GLU glu) { if (this.cameraAnchor != null) { cameraAnchor.refresh(glu); } } public void setAnchor(int type) { switch (type) { case CAMERAANCHOR_CONTROLLER: this.cameraAnchor = new CameraAnchorController(this.camera); break; case CAMERAANCHOR_FOLLOWER: this.cameraAnchor = new CameraAnchorFollower(this.camera); break; case CAMERAANCHOR_TRACK: this.cameraAnchor = new CameraAnchorTrack(this.camera); break; } } public void tryToSetDirection(float x, float y) { if (this.cameraAnchor.toString().equals("CameraAnchorController")) { ((CameraAnchorController) this.cameraAnchor).setDirection(x, y); } } public void tryToSetMove(float x, float y, float z) { if (this.cameraAnchor.toString().equals("CameraAnchorController")) { ((CameraAnchorController) this.cameraAnchor).setMove(x, y, z); } } public void tryToSetCameraDimension(float w, float h) { if (this.cameraAnchor.toString().equals("CameraAnchorController")) { ((CameraAnchorController) this.cameraAnchor).setDimension(w, h); } } public void tryToSetFollowedNode(TransformationNode fn) { if (this.cameraAnchor.toString().equals("CameraAnchorFollower")) { ((CameraAnchorFollower) this.cameraAnchor).setFollowedNode(fn); } } public void tryToSetCameraTrack(CameraTrack ct) { if (this.cameraAnchor.toString().equals("CameraAnchorTrack")) { ((CameraAnchorTrack) this.cameraAnchor).setCameraTrack(ct); } } public Vertex3f getCameraPosition() { return(this.camera.getEye()); } public Vertex3f getCameraView() { return(this.camera.getView()); } public Vertex3f getCameraUp() { return(this.camera.getUp()); } }