Input for beginers

Previous topic - Next topic

siatek

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


Code (glbasic) Select



// ------------------------------------------------------------- //
// 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()

glbasic roxx !!!

r0ber7

Nicely done, very OOP.  =D

Wampus

siatek looks good but I'm having a little trouble. Where is the TVec2d type defined? From other source you've done?

siatek

#3
achh yes :)
sorry for that
fixed now :)
glbasic roxx !!!

Wampus

Doh. I should have been able to guess what the definition was from looking at the code. Thanks though. :)

fuzzy70

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
Code (glbasic) Select
"input.gbas"(379) error : command not inside function or sub
which is pointing to this line
Code (glbasic) Select
keyboard.Create()

I am probably missing something obvious but it's not sinking in  :D

Lee
"Why don't you just make ten louder and make ten be the top number and make that a little louder?"
- "These go to eleven."

This Is Spinal Tap (1984)

siatek

#6
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
glbasic roxx !!!

fuzzy70

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
"Why don't you just make ten louder and make ten be the top number and make that a little louder?"
- "These go to eleven."

This Is Spinal Tap (1984)