| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- package application
- import (
- "github.com/g3n/engine/window"
- )
- // KeyState keeps track of the state of all keys.
- type KeyState struct {
- win window.IWindow
- states map[window.Key]bool
- }
- // NewKeyState returns a new KeyState object.
- func NewKeyState(win window.IWindow) *KeyState {
- ks := new(KeyState)
- ks.win = win
- ks.states = map[window.Key]bool{
- window.KeyUnknown : false,
- window.KeySpace : false,
- window.KeyApostrophe : false,
- window.KeyComma : false,
- window.KeyMinus : false,
- window.KeyPeriod : false,
- window.KeySlash : false,
- window.Key0 : false,
- window.Key1 : false,
- window.Key2 : false,
- window.Key3 : false,
- window.Key4 : false,
- window.Key5 : false,
- window.Key6 : false,
- window.Key7 : false,
- window.Key8 : false,
- window.Key9 : false,
- window.KeySemicolon : false,
- window.KeyEqual : false,
- window.KeyA : false,
- window.KeyB : false,
- window.KeyC : false,
- window.KeyD : false,
- window.KeyE : false,
- window.KeyF : false,
- window.KeyG : false,
- window.KeyH : false,
- window.KeyI : false,
- window.KeyJ : false,
- window.KeyK : false,
- window.KeyL : false,
- window.KeyM : false,
- window.KeyN : false,
- window.KeyO : false,
- window.KeyP : false,
- window.KeyQ : false,
- window.KeyR : false,
- window.KeyS : false,
- window.KeyT : false,
- window.KeyU : false,
- window.KeyV : false,
- window.KeyW : false,
- window.KeyX : false,
- window.KeyY : false,
- window.KeyZ : false,
- window.KeyLeftBracket : false,
- window.KeyBackslash : false,
- window.KeyRightBracket : false,
- window.KeyGraveAccent : false,
- window.KeyWorld1 : false,
- window.KeyWorld2 : false,
- window.KeyEscape : false,
- window.KeyEnter : false,
- window.KeyTab : false,
- window.KeyBackspace : false,
- window.KeyInsert : false,
- window.KeyDelete : false,
- window.KeyRight : false,
- window.KeyLeft : false,
- window.KeyDown : false,
- window.KeyUp : false,
- window.KeyPageUp : false,
- window.KeyPageDown : false,
- window.KeyHome : false,
- window.KeyEnd : false,
- window.KeyCapsLock : false,
- window.KeyScrollLock : false,
- window.KeyNumLock : false,
- window.KeyPrintScreen : false,
- window.KeyPause : false,
- window.KeyF1 : false,
- window.KeyF2 : false,
- window.KeyF3 : false,
- window.KeyF4 : false,
- window.KeyF5 : false,
- window.KeyF6 : false,
- window.KeyF7 : false,
- window.KeyF8 : false,
- window.KeyF9 : false,
- window.KeyF10 : false,
- window.KeyF11 : false,
- window.KeyF12 : false,
- window.KeyF13 : false,
- window.KeyF14 : false,
- window.KeyF15 : false,
- window.KeyF16 : false,
- window.KeyF17 : false,
- window.KeyF18 : false,
- window.KeyF19 : false,
- window.KeyF20 : false,
- window.KeyF21 : false,
- window.KeyF22 : false,
- window.KeyF23 : false,
- window.KeyF24 : false,
- window.KeyF25 : false,
- window.KeyKP0 : false,
- window.KeyKP1 : false,
- window.KeyKP2 : false,
- window.KeyKP3 : false,
- window.KeyKP4 : false,
- window.KeyKP5 : false,
- window.KeyKP6 : false,
- window.KeyKP7 : false,
- window.KeyKP8 : false,
- window.KeyKP9 : false,
- window.KeyKPDecimal : false,
- window.KeyKPDivide : false,
- window.KeyKPMultiply : false,
- window.KeyKPSubtract : false,
- window.KeyKPAdd : false,
- window.KeyKPEnter : false,
- window.KeyKPEqual : false,
- window.KeyLeftShift : false,
- window.KeyLeftControl : false,
- window.KeyLeftAlt : false,
- window.KeyLeftSuper : false,
- window.KeyRightShift : false,
- window.KeyRightControl : false,
- window.KeyRightAlt : false,
- window.KeyRightSuper : false,
- window.KeyMenu : false,
- }
- // Subscribe to window key events
- ks.win.SubscribeID(window.OnKeyUp, &ks, ks.onKey)
- ks.win.SubscribeID(window.OnKeyDown, &ks, ks.onKey)
- return ks
- }
- // Dispose unsubscribes from the window events.
- func (ks *KeyState) Dispose() {
- ks.win.UnsubscribeID(window.OnKeyUp, &ks)
- ks.win.UnsubscribeID(window.OnKeyDown, &ks)
- }
- // Pressed returns whether the specified key is currently pressed.
- func (ks *KeyState) Pressed(k window.Key) bool {
- return ks.states[k]
- }
- // onKey receives key events and updates the internal map of states.
- func (ks *KeyState) onKey(evname string, ev interface{}) {
- kev := ev.(*window.KeyEvent)
- switch evname {
- case window.OnKeyUp:
- ks.states[kev.Keycode] = false
- case window.OnKeyDown:
- ks.states[kev.Keycode] = true
- }
- }
|