Mercurial > projects > mde
view mde/input/core.d @ 2:78eb491bd642
mergetag: partially redesigned dataset and text reader classes. Changed text format.
committer: Diggory Hardy <diggory.hardy@gmail.com>
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Sat, 03 Nov 2007 15:15:43 +0000 |
parents | d547009c104c |
children |
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 opCall (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