Mercurial > projects > openmelee
diff main.d @ 0:c10bc63824e7
Initial commit!
author | zzzzrrr <mason.green@gmail.com> |
---|---|
date | Fri, 20 Mar 2009 06:41:25 -0400 |
parents | |
children | a40d066ebbd1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.d Fri Mar 20 06:41:25 2009 -0400 @@ -0,0 +1,120 @@ +/* + * 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 melee.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 melee.melee; +import melee.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.killList.keys; + foreach(k; key) { + whut.world.destroyBody(whut.killList[k]); + whut.killList.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; + whut.viewCenter = p1 - (distance * 0.5f); + } + + }); + + while (running && !whut.quit) { + float delta = timer.stop; + timer.start; + jobHub.update(delta); + } +}