#ifndef SPECTRE_INPUT_EVENT_H #define SPECTRE_INPUT_EVENT_H #include #include namespace MouseButton { enum Type { Unknown, Left, Right, Middle, Button1, Button2, NUM_MBUTTONS, }; }; namespace Key { enum Type { Unknown, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Zero, Period, Comma, Enter, Backspace, Escape, Space, Capslock, Up, Down, Left, Right, NUMPAD_1, NUMPAD_2, NUMPAD_3, NUMPAD_4, NUMPAD_5, NUMPAD_6, NUMPAD_7, NUMPAD_8, NUMPAD_9, NUMPAD_0, NUMPAD_Enter, Home, End, Insert, Delete, PageUp, PageDown, Pause, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, Tab, LShift, RShift, LCtrl, RCtrl, LAlt, RAlt, NUM_KEYS, }; } typedef struct InputEvent { enum Type { None, Key, MouseButton, MousePosition }; struct KeyEvent { Key::Type code; bool pressed; /* true if pressed, false if released. */ std::string getKeyName() const; /* Get the key name */ }; struct MouseButtonEvent { MouseButton::Type button; bool pressed; /* true if pressed, false if released. */ std::string getName() const; }; struct MouseEvent { unsigned int x; unsigned int y; }; Type type; union { struct KeyEvent key; struct MouseEvent mouse; struct MouseButtonEvent mouseButton; }; InputEvent(Type type = None); } InputEvent; #endif /* SPECTRE_INPUT_EVENT_H */