view main.d @ 8:4ee9e4a0c03b

changed license header
author zzzzrrr <mason.green@gmail.com>
date Sat, 21 Mar 2009 19:44:19 -0400
parents 2217fd1fe384
children 5b61327b5a7c
line wrap: on
line source

/*
 * Copyright (c) 2009, Mason Green (zzzzrrr)
 * http://www.dsource.org/projects/openmelee
 * 
 * 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;

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 blaze.common.bzMath: bzVec2;

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( {
        bzVec2 velocity = whut.ship1.rBody.linearVelocity;
        whut.ship1.limitVelocity();
    });

    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, 5, 50);
            whut.viewCenter = p1 - (distance * 0.5f);
        }
        
    });

    while (running && !whut.quit) {
        float delta = timer.stop;
        timer.start;
        jobHub.update(delta);
    }
}