Mercurial > projects > openmelee
view main.d @ 2:a40d066ebbd1
implemented zoom
author | Zzzzrrr <mason.green@gmail.com> |
---|---|
date | Fri, 20 Mar 2009 11:03:51 -0400 |
parents | c10bc63824e7 |
children | 6f455ef24063 |
line wrap: on
line source
/* * Copyright (c) 2009, Mason Green (zzzzrrr) * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of the polygonal nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ module openmelee.main; import tango.io.Stdout : Stdout; version(distrib) import tango.io.vfs.ZipFolder; import tango.time.StopWatch; import fc = tango.text.convert.Float : toString; import tango.util.log.Trace; import tango.math.Math; import xf.core.JobHub; import xf.hybrid.Hybrid; import xf.hybrid.backend.GL; import xf.omg.core.LinearAlgebra; import openmelee.melee; import openmelee.render; const ITERS_PER_SECOND = 60; void main() { Settings settings; float timeStep = settings.hz > 0.0f ? 1.0f / settings.hz : 0.0f; version(distrib) gui.vfs.mount(new ZipFolder("./gui.zip")); scope cfg = loadHybridConfig("./gui.cfg"); scope renderer = new Renderer; auto whut = new Render(&settings); gui.begin(cfg).retained; gui.push(`main`); GLViewport(`glview`).renderingHandler(&whut.draw) .addHandler(&whut.onClick) .addHandler(&whut.onMove) .addHandler(&whut.onKey) .addHandler(&whut.onDT) .addHandler(&whut.onMouseEnter) .addHandler(&whut.onMouseLeave) .grabKeyboardFocus; gui.pop(); gui.immediate.end; StopWatch timer; jobHub.addRepeatableJob( { whut.world.step(timeStep, settings.velocityIterations, settings.positionIterations); }, ITERS_PER_SECOND); bool running = true; jobHub.addPreFrameJob( { // Clean out the kill list uint[] key = whut.wrapList.keys; foreach(k; key) { //bzVec2 p = whut.wrapList[key].position; whut.wrapList.remove(k); } }); jobHub.addPostFrameJob( { gui.begin(cfg); gui.push(`main`); if (gui().getProperty!(bool)("frame.closeClicked")) { running = false; } if(whut.thrust) { whut.ship1.thrust(); } gui().setProperty!(bool)("showCursor", true); gui.pop(); gui.end; gui.render(renderer); { vec2 p1 = vec2.from(whut.ship1.rBody.position); vec2 p2 = vec2.from(whut.ship2.rBody.position); vec2 distance = p1 - p2; float d = distance.length; whut.zoom = bzClamp(1/d*1000, 10, 50); whut.viewCenter = p1 - (distance * 0.5f); } }); while (running && !whut.quit) { float delta = timer.stop; timer.start; jobHub.update(delta); } }