view mde/events.d @ 30:467c74d4804d

Major changes to the scheduler, previously only used by the main loop. Revamped Scheduler. Functions can be removed, have multiple schedules, have their scheduling changed, etc. Scheduler has a unittest. Checked all pass. Main loop scheduler moved to mde. Draw-on-demand currently disabled, simplifying this. Made mtunitest.d remove the temporary file it uses afterwards. committer: Diggory Hardy <diggory.hardy@gmail.com>
author Diggory Hardy <diggory.hardy@gmail.com>
date Mon, 28 Apr 2008 10:59:47 +0100
parents f985c28c0ec9
children baa87e68d7dc
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/>. */

/// Handles all events from SDL_PollEvent.
module mde.events;

import global = mde.global;
import sdl = mde.SDL;           // resizeWindow

import mde.input.input;
import mde.input.exception;

import mde.scheduler.InitFunctions;

import derelict.sdl.events;

import tango.time.Time;
import tango.util.log.Log : Log, Logger;

private Logger logger;
static this() {
    logger = Log.getLogger ("mde.events");
    
    init.addFunc (&initInput, "initInput");
}

void initInput () { // init func
    try {
        global.input = new Input();
        global.input.loadConfig ();         // (may also create instance)
    
        global.input.addButtonCallback (cast(Input.inputID) 0x0u, delegate void(Input.inputID i, bool b) {
            if (b) {
                logger.info ("Quiting...");
                global.run = false;
            }
        } );
    } catch (Exception) {
        setInitFailure;
    }
}

void pollEvents (TimeSpan) {
    SDL_Event event;
    while (SDL_PollEvent (&event)) {
        switch (event.type) {
            case SDL_QUIT:
                logger.info ("Quit requested");
                global.run = false;
                break;
            case SDL_VIDEORESIZE:
                sdl.resizeWindow (event.resize.w, event.resize.h);
                //global.scheduler.request(global.SCHEDULE.DRAW);
                break;
            /+case SDL_ACTIVEEVENT:
            case SDL_VIDEOEXPOSE:
                //global.scheduler.request(global.SCHEDULE.DRAW);
                break;+/
            default:
                try {
                    global.input (event);
                } catch (InputClassException e) {
                    logger.error ("Caught input exception; event will be ignored. Exception was:");
                    logger.error (e.msg);
                }
        }
    }
}