Mercurial > projects > mde
view mde/input/core.d @ 0:d547009c104c
Repository creation.
committer: Diggory Hardy <diggory.hardy@gmail.com>
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Sat, 27 Oct 2007 18:05:39 +0100 |
parents | |
children | 78eb491bd642 |
line wrap: on
line source
/// This module contains the core (i.e. common part) of the input system. module mde.input.core; /+ alias Exception InputException; // this can be expanded to a custom class if needed typedef uint index_t; struct RelPair { real x, y; static RelPair opCall (real a, real b) { RelPair ret; ret.x = a; ret.y = b; return ret; } } /* Note: We really want an array, not a stack. We cannot edit these lists, so we can either * copy the stack or just iterate through it as an array. */ typedef uint[] outQueue; /// This is the type for the out queue config data. struct readOutQueue { /// A convenient structure for reading an outQueue item by item. private outQueue _q; // the queue, stored by reference to the original private uint p = 0; // current read position (start at beginning) static readOutQueue (outQueue q) { /// Static constructor readOutQueue ret; ret._q = q; return ret; } uint next () { /// Get the next element. Throws an exception if there isn't another. if (p >= _q.length()) throw new InputException ("Input: Invalid configuration: incomplete config stack"); uint ret = _q[p]; ++p; return ret; } } /+ struct out_stack { // a remove-only stack with exception throwing uint[] _data; static out_stack opCall (uint[] d) { out_stack ret; ret._data = d; return ret; } uint pop () { if (_data.length < 1) throw new InputException ("Input: Invalid configuration: incomplete config stack"); uint a = _data[length - 1]; _data.length = _data.length - 1; return a; } } +/ bool[index_t] b_tbl; /// Table of button states real[index_t] axis_tbl; /// Table of axes states uint mouse_x, mouse_y; /// Current screen coords of the mouse // FIXME: these need to be reset after every access: RelPair[index_t] axis_rel_tbl; /// Table of relative mouse / joystick ball motions +/