/* Dice in the dark. D & D app for the blind and seeing impaired, * Copyright (C) <2013r> <Lovisa Irpa Helgadottir> * * This program 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package com.plovergames.framework.gl; import javax.microedition.khronos.opengles.GL10; import com.plovergames.framework.impl.GLGraphics; import com.plovergames.framework.math.Vector2; public class Camera2D { public final Vector2 position; public float zoom; public final float frustumWidth; public final float frustumHeight; final GLGraphics glGraphics; public Camera2D(GLGraphics glGraphics, float frustumWidth, float frustumHeight) { this.glGraphics = glGraphics; this.frustumWidth = frustumWidth; this.frustumHeight = frustumHeight; this.position = new Vector2(frustumWidth / 2, frustumHeight / 2); this.zoom = 1.0f; } public void setViewportAndMatrices() { GL10 gl = glGraphics.getGL(); gl.glViewport(0, 0, glGraphics.getWidth(), glGraphics.getHeight()); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glOrthof(position.x - frustumWidth * zoom / 2, position.x + frustumWidth * zoom/ 2, position.y - frustumHeight * zoom / 2, position.y + frustumHeight * zoom/ 2, 1, -1); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); } public void touchToWorld(Vector2 touch) { touch.x = (touch.x / (float) glGraphics.getWidth()) * frustumWidth * zoom; touch.y = (1 - touch.y / (float) glGraphics.getHeight()) * frustumHeight * zoom; touch.add(position).sub(frustumWidth * zoom / 2, frustumHeight * zoom / 2); } }