Mercurial > projects > mde
comparison 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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:d547009c104c |
---|---|
1 /// This module contains the core (i.e. common part) of the input system. | |
2 module mde.input.core; | |
3 /+ | |
4 alias Exception InputException; // this can be expanded to a custom class if needed | |
5 typedef uint index_t; | |
6 struct RelPair { | |
7 real x, y; | |
8 static RelPair opCall (real a, real b) { | |
9 RelPair ret; | |
10 ret.x = a; ret.y = b; | |
11 return ret; | |
12 } | |
13 } | |
14 | |
15 /* Note: We really want an array, not a stack. We cannot edit these lists, so we can either | |
16 * copy the stack or just iterate through it as an array. | |
17 */ | |
18 typedef uint[] outQueue; /// This is the type for the out queue config data. | |
19 struct readOutQueue { /// A convenient structure for reading an outQueue item by item. | |
20 private outQueue _q; // the queue, stored by reference to the original | |
21 private uint p = 0; // current read position (start at beginning) | |
22 | |
23 static readOutQueue (outQueue q) { /// Static constructor | |
24 readOutQueue ret; | |
25 ret._q = q; | |
26 return ret; | |
27 } | |
28 uint next () { /// Get the next element. Throws an exception if there isn't another. | |
29 if (p >= _q.length()) | |
30 throw new InputException ("Input: Invalid configuration: incomplete config stack"); | |
31 uint ret = _q[p]; | |
32 ++p; | |
33 return ret; | |
34 } | |
35 } | |
36 /+ | |
37 struct out_stack { // a remove-only stack with exception throwing | |
38 uint[] _data; | |
39 | |
40 static out_stack opCall (uint[] d) { | |
41 out_stack ret; | |
42 ret._data = d; | |
43 return ret; | |
44 } | |
45 uint pop () { | |
46 if (_data.length < 1) | |
47 throw new InputException ("Input: Invalid configuration: incomplete config stack"); | |
48 uint a = _data[length - 1]; | |
49 _data.length = _data.length - 1; | |
50 return a; | |
51 } | |
52 } | |
53 +/ | |
54 | |
55 bool[index_t] b_tbl; /// Table of button states | |
56 real[index_t] axis_tbl; /// Table of axes states | |
57 uint mouse_x, mouse_y; /// Current screen coords of the mouse | |
58 // FIXME: these need to be reset after every access: | |
59 RelPair[index_t] axis_rel_tbl; /// Table of relative mouse / joystick ball motions | |
60 +/ |