Mercurial > projects > mde
view mde/mainLoop.d @ 176:d5d5fe04ca6c
Fixes to CollapsibleWidget. Disabled AChildWidget.invariant.
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Sat, 12 Sep 2009 09:14:43 +0200 |
parents | e45226d3deae |
children |
line wrap: on
line source
/* LICENSE BLOCK Part of mde: a Modular D game-oriented Engine Copyright © 2007-2008 Diggory Hardy 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, see <http://www.gnu.org/licenses/>. */ /****************************************************************************** * Adds some standard functionality to the main loop. *****************************************************************************/ module mde.mainLoop; import mde.imde; import mde.scheduler.Scheduler; import mde.events; import mde.content.AStringContent; // pollInterval option static this () { // Make available to all importing modules: mainSchedule = new Scheduler; mainSchedule.add (mainSchedule.getNewID, &mde.events.pollEvents).frame = true; // Polling interval of main loop; use old name to save renaming: pollInterval = new DoubleContent ("MiscOptions.pollInterval"); pollInterval.addCallback (delegate void(IContent) { if (pollInterval() !<= 0.1 || pollInterval() !>= 0.0) pollInterval = 0.01; mainInterval = pollInterval(); }); version (mdeBenchmark) { // Print fps every 5 seconds: void frameRateTest (TimeSpan elapsed) { static TimeSpan total; static size_t num; total += elapsed; ++num; if (total.seconds > 5) { logger.info ("{0} frames in {1:f3} seconds: {2:f3} fps", num, total.interval, num/total.interval); total = TimeSpan.zero; num = 0; } mainSchedule.request (SCHEDULE.DRAW); // force draw every frame mainInterval = 0.0; // force zero wait } mainSchedule.add (mainSchedule.getNewID, &frameRateTest).frame = true; } } DoubleContent pollInterval; double mainInterval; /// Polling interval of main loop (kept in sync with pollInterval)