Hi this is my input file, the keyboard are about 90% taken from other post on this forum a mouse is made by my self but with keyboard stuff like ... i think that it's usefull for beginners ...
cheers
// ------------------------------------------------------------- //
// SUB __CONST_MOUSE_BUTTONS__:; ENDSUB
// ------------------------------------------------------------- //
CONSTANT LMB = 1
CONSTANT RMB = 2
CONSTANT MMB = 3
// ------------------------------------------------------------- //
// SUB __CONST_MOUSE_EVENTS__:; ENDSUB
// ------------------------------------------------------------- //
CONSTANT IS_UP = 0
CONSTANT IS_DOWN = 1
CONSTANT IS_PRESSED = 2
CONSTANT IS_RELEASED = 3
// ------------------------------------------------------------- //
// SUB __KeysConst__:; ENDSUB
// ------------------------------------------------------------- //
CONSTANT vk_escape = 0x01
CONSTANT vk_1 = 0x02
CONSTANT vk_2 = 0x03
CONSTANT vk_3 = 0x04
CONSTANT vk_4 = 0x05
CONSTANT vk_5 = 0x06
CONSTANT vk_6 = 0x07
CONSTANT vk_7 = 0x08
CONSTANT vk_8 = 0x09
CONSTANT vk_9 = 0x0A
CONSTANT vk_0 = 0x0B
CONSTANT vk_minus = 0x0C // - on main keyboard
CONSTANT vk_equals = 0x0D
CONSTANT vk_back = 0x0E // backspace
CONSTANT vk_tab = 0x0F
CONSTANT vk_q = 0x10
CONSTANT vk_w = 0x11
CONSTANT vk_e = 0x12
CONSTANT vk_r = 0x13
CONSTANT vk_t = 0x14
CONSTANT vk_y = 0x15
CONSTANT vk_u = 0x16
CONSTANT vk_i = 0x17
CONSTANT vk_o = 0x18
CONSTANT vk_p = 0x19
CONSTANT vk_lbracket = 0x1A
CONSTANT vk_rbracket = 0x1B
CONSTANT vk_return = 0x1C // Enter on main keyboard
CONSTANT vk_lcontrol = 0x1D
CONSTANT vk_a = 0x1E
CONSTANT vk_s = 0x1F
CONSTANT vk_d = 0x20
CONSTANT vk_f = 0x21
CONSTANT vk_g = 0x22
CONSTANT vk_h = 0x23
CONSTANT vk_j = 0x24
CONSTANT vk_k = 0x25
CONSTANT vk_l = 0x26
CONSTANT vk_semicolon = 0x27
CONSTANT vk_apostrophe = 0x28
CONSTANT vk_grave = 0x29 // accent grave
CONSTANT vk_lshift = 0x2A
CONSTANT vk_backslash = 0x2B
CONSTANT vk_z = 0x2C
CONSTANT vk_x = 0x2D
CONSTANT vk_c = 0x2E
CONSTANT vk_v = 0x2F
CONSTANT vk_b = 0x30
CONSTANT vk_n = 0x31
CONSTANT vk_m = 0x32
CONSTANT vk_comma = 0x33
CONSTANT vk_period = 0x34 // . on main keyboard
CONSTANT vk_slash = 0x35 // / on main keyboard
CONSTANT vk_rshift = 0x36
CONSTANT vk_multiply = 0x37 // * on numeric keypad
CONSTANT vk_lmenu = 0x38 // left Alt
CONSTANT vk_space = 0x39
CONSTANT vk_capital = 0x3A
CONSTANT vk_f1 = 0x3B
CONSTANT vk_f2 = 0x3C
CONSTANT vk_f3 = 0x3D
CONSTANT vk_f4 = 0x3E
CONSTANT vk_f5 = 0x3F
CONSTANT vk_f6 = 0x40
CONSTANT vk_f7 = 0x41
CONSTANT vk_f8 = 0x42
CONSTANT vk_f9 = 0x43
CONSTANT vk_f10 = 0x44
CONSTANT vk_numlock = 0x45
CONSTANT vk_scroll = 0x46 // Scroll Lock
CONSTANT vk_numpad7 = 0x47
CONSTANT vk_numpad8 = 0x48
CONSTANT vk_numpad9 = 0x49
CONSTANT vk_subtract = 0x4A // - on numeric keypad
CONSTANT vk_numpad4 = 0x4B
CONSTANT vk_numpad5 = 0x4C
CONSTANT vk_numpad6 = 0x4D
CONSTANT vk_add = 0x4E // + on numeric keypad
CONSTANT vk_numpad1 = 0x4F
CONSTANT vk_numpad2 = 0x50
CONSTANT vk_numpad3 = 0x51
CONSTANT vk_numpad0 = 0x52
CONSTANT vk_decimal = 0x53 // . on numeric keypad
CONSTANT vk_oem_102 = 0x56 // < > | on UK/Germany keyboards
CONSTANT vk_f11 = 0x57
CONSTANT vk_f12 = 0x58
CONSTANT vk_f13 = 0x64 // (NEC PC98)
CONSTANT vk_f14 = 0x65 // (NEC PC98)
CONSTANT vk_f15 = 0x66 // (NEC PC98)
CONSTANT vk_kana = 0x70 // (Japanese keyboard)
CONSTANT vk_abnt_c1 = 0x73 // / ? on Portugese (Brazilian) keyboards
CONSTANT vk_convert = 0x79 // (Japanese keyboard)
CONSTANT vk_noconvert = 0x7B // (Japanese keyboard)
CONSTANT vk_yen = 0x7D // (Japanese keyboard)
CONSTANT vk_abnt_c2 = 0x7E // Numpad . on Portugese (Brazilian) keyboards
CONSTANT vk_numpadequals = 0x8D // = on numeric keypad (NEC PC98)
CONSTANT vk_prevtrack = 0x90 // Previous Track (CONSTANT vk_CIRCUMFLEX on Japanese keyboard)
CONSTANT vk_at = 0x91 // (NEC PC98)
CONSTANT vk_colon = 0x92 // (NEC PC98)
CONSTANT vk_underline = 0x93 // (NEC PC98)
CONSTANT vk_kanji = 0x94 // (Japanese keyboard)
CONSTANT vk_stop = 0x95 // (NEC PC98)
CONSTANT vk_ax = 0x96 // (Japan AX)
CONSTANT vk_unlabeled = 0x97 // (J3100)
CONSTANT vk_nexttrack = 0x99 // Next Track
CONSTANT vk_numpadenter = 0x9C // Enter on numeric keypad
CONSTANT vk_rcontrol = 0x9D
CONSTANT vk_mute = 0xA0 // Mute
CONSTANT vk_calculator = 0xA1 // Calculator
CONSTANT vk_playpause = 0xA2 // Play / Pause
CONSTANT vk_mediastop = 0xA4 // Media Stop
CONSTANT vk_volumedown = 0xAE // Volume -
CONSTANT vk_volumeup = 0xB0 // Volume +
CONSTANT vk_webhome = 0xB2 // Web home
CONSTANT vk_numpadcomma = 0xB3 // , on numeric keypad (NEC PC98)
CONSTANT vk_divide = 0xB5 // / on numeric keypad
CONSTANT vk_sysrq = 0xB7
CONSTANT vk_rmenu = 0xB8 // right Alt
CONSTANT vk_pause = 0xC5 // Pause
CONSTANT vk_home = 0xC7 // Home on arrow keypad
CONSTANT vk_up = 0xC8 // UpArrow on arrow keypad
CONSTANT vk_prior = 0xC9 // PgUp on arrow keypad
CONSTANT vk_left = 0xCB // LeftArrow on arrow keypad
CONSTANT vk_right = 0xCD // RightArrow on arrow keypad
CONSTANT vk_end = 0xCF // End on arrow keypad
CONSTANT vk_down = 0xD0 // DownArrow on arrow keypad
CONSTANT vk_next = 0xD1 // PgDn on arrow keypad
CONSTANT vk_insert = 0xD2 // Insert on arrow keypad
CONSTANT vk_delete = 0xD3 // Delete on arrow keypad
CONSTANT vk_lwin = 0xDB // Left Windows key
CONSTANT vk_rwin = 0xDC // Right Windows key
CONSTANT vk_apps = 0xDD // AppMenu key
CONSTANT vk_power = 0xDE // System Power
CONSTANT vk_sleep = 0xDF // System Sleep
CONSTANT vk_wake = 0xE3 // System Wake
CONSTANT vk_websearch = 0xE5 // Web Search
CONSTANT vk_webfavorites = 0xE6 // Web Favorites
CONSTANT vk_webrefresh = 0xE7 // Web Refresh
CONSTANT vk_webstop = 0xE8 // Web Stop
CONSTANT vk_webforward = 0xE9 // Web Forward
CONSTANT vk_webback = 0xEA // Web Back
CONSTANT vk_mycomputer = 0xEB // My Computer
CONSTANT vk_mail = 0xEC // Mail
CONSTANT vk_mediaselect = 0xED // Media Select
// ------------------------------------------------------------- //
// SUB __TVec2d__:; ENDSUB
// ------------------------------------------------------------- //
TYPE TVec2d
x
y
ENDTYPE
// ------------------------------------------------------------- //
// SUB __TKeyboard__:; ENDSUB
// ------------------------------------------------------------- //
TYPE TKeyboard
gKeyDown[]
gKeyState[]
FUNCTION Create:
self.Destroy()
DIM self.gKeyDown[256]
DIM self.gKeyState[256]
ENDFUNCTION
FUNCTION Update:
LOCAL k
FOR i=0 TO 255
k = KEY(i)
IF k
IF self.gKeyDown[i]
self.gKeyState[i]=IS_DOWN
ELSE
self.gKeyDown[i]=IS_DOWN
self.gKeyState[i]=IS_PRESSED
ENDIF
ELSE
IF self.gKeyDown[i]
self.gKeyDown[i] = IS_UP
self.gKeyState[i] = IS_RELEASED
ELSE
self.gKeyState[i] = IS_UP
ENDIF
ENDIF
NEXT
ENDFUNCTION
FUNCTION GetState: nkey
RETURN self.gKeyState[nkey]
ENDFUNCTION
FUNCTION Destroy:
DIM self.gKeyDown[0]
DIM self.gKeyState[0]
ENDFUNCTION
ENDTYPE // TKeyboard
// ------------------------------------------------------------- //
// SUB __TMouse__:; ENDSUB
// ------------------------------------------------------------- //
TYPE TMouse
position AS TVec2d
b1_last
b2_last
b3_last
b1_state
b2_state
b3_state
isActive$
isVisible$
FUNCTION Update:
LOCAL b1
LOCAL b2
LOCAL b3
MOUSESTATE self.position.x, self.position.y, b1, b2
b3 = MOUSEAXIS(5)
IF b1
IF self.b1_last = IS_UP
self.b1_state = IS_PRESSED
ELSE
self.b1_state = IS_DOWN
ENDIF
ELSE
IF self.b1_last = IS_DOWN
self.b1_state = IS_RELEASED
ELSE
self.b1_state = IS_UP
ENDIF
ENDIF
self.b1_last = b1
IF b2
IF self.b2_last = IS_UP
self.b2_state = IS_PRESSED
ELSE
self.b2_state = IS_DOWN
ENDIF
ELSE
IF self.b2_last = IS_DOWN
self.b2_state = IS_RELEASED
ELSE
self.b2_state = IS_UP
ENDIF
ENDIF
self.b2_last = b2
IF b3
IF self.b3_last = IS_UP
self.b3_state = IS_PRESSED
ELSE
self.b3_state = IS_DOWN
ENDIF
ELSE
IF self.b3_last = IS_DOWN
self.b3_state = IS_RELEASED
ELSE
self.b3_state = IS_UP
ENDIF
ENDIF
self.b3_last = b3
ENDFUNCTION
FUNCTION GetState: button
SELECT button
CASE LMB
RETURN self.b1_state
CASE RMB
RETURN self.b2_state
CASE MMB
RETURN self.b3_state
ENDSELECT
ENDFUNCTION
ENDTYPE // TMouse
// ------------------------------------------------------------- //
// SUB __MAIN__:; ENDSUB
// ------------------------------------------------------------- //
// this is example code
GLOBAL mouse AS TMouse
GLOBAL keyboard AS TKeyboard
keyboard.Create()
WHILE TRUE //main loop
mouse.Update()
keyboard.Update()
// do some stuff
//example usage:
// IF keyboard.GetState(vk_right) = IS_DOWN THEN do_something_function
// IF mouse.b1 = IS_PRESSED THEN do_something_function_2
SHOWSCREEN
WEND
keyboard.Destroy()
Nicely done, very OOP. =D
siatek looks good but I'm having a little trouble. Where is the TVec2d type defined? From other source you've done?
achh yes :)
sorry for that
fixed now :)
Doh. I should have been able to guess what the definition was from looking at the code. Thanks though. :)
I think I am doing something really dumb. I made a new project then pasted the above code into it & when I go to compile I get the following error
"input.gbas"(379) error : command not inside function or sub
which is pointing to this line
keyboard.Create()
I am probably missing something obvious but it's not sinking in :D
Lee
There are 3 ways:
- all constant values and types move to other source file
- remove all stuff kind: SUB __KeysConst__:; ENDSUB (or comment out)
- put main program of top of the first: SUB __KeysConst__:; ENDSUB
im recommendet first one
cheers
ps. im edited this source so now it should work
Commenting out the subs worked, will try it out as a separate file later as that's the way I would make use of it in a proper project.
Cheers siatek
Lee
Sent from my GT-I5700 using Tapatalk 2