//      zoom.gib
//
//      zoom script for GIB in QuakeForge 0.5
//
//      Copyright (C) 2002  Brian Koropoff
//
//      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 2
//      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, write to:
//
//              Free Software Foundation, Inc.
//              59 Temple Place - Suite 330
//              Boston, MA  02111-1307, USA
//
// $Id$

global zoom

function "zoom.init" { // Initialize basic options
	if ($argc != 6) {
		echo "Usage: $0 base_amp base_fov min_zoom max_zoom zoom_step"
		return
	}
	zoom.amp = $1
	zoom.fov = $2
	zoom.mult.lower = $3
	zoom.mult = $3
	zoom.mult.upper = $4
	zoom.mult.step = $5
	zoom.zoomed = 0
	set fov ${zoom.fov}
	set in_amp ${zoom.amp}
}

// Default initial values
zoom.init 1 90 1 90 1.15

function "zoom.adjust" { // Adjust fov and sensitivity to match zoom factor
	if ${zoom.zoomed} {
		set fov (${zoom.fov}/${zoom.mult})
		set in_amp (${zoom.amp}/${zoom.mult})
		return
	} else {
		set fov ${zoom.fov}
		set in_amp ${zoom.amp}
	}
}

function "zoom.in" {
	zoom.zoomed = 1
	zoom.adjust
}

function "zoom.out" {
	zoom.zoomed = 0
	zoom.adjust
}

function "zoom.toggle" {
	zoom.zoomed = (!${zoom.zoomed})
	zoom.adjust
}

function "zoom.increase" {
	ifnot ${zoom.zoomed} {
		return
	}
	zoom.mult = (${zoom.mult.step}*${zoom.mult})
	if (${zoom.mult} > ${zoom.mult.upper}) {
		zoom.mult = ${zoom.mult.upper}
	}
	zoom.adjust
}

function "zoom.decrease" {
	ifnot ${zoom.zoomed} return
	zoom.mult = (${zoom.mult}/${zoom.mult.step})
	if (${zoom.mult} < ${zoom.mult.lower}) {
		zoom.mult = ${zoom.mult.lower}
	}
	zoom.adjust
}

export zoom.init
export zoom.increase
export zoom.decrease
export zoom.in
export zoom.out
export zoom.toggle

