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);
+    }
+}