view mde/mainLoop.d @ 170:e45226d3deae

Context menu services not applicable to the current type can now be hidden. Added files missing from previous commits.
author Diggory Hardy <diggory.hardy@gmail.com>
date Mon, 29 Jun 2009 21:20:16 +0200
parents 9f035cd139c6
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)