Changeset 27


Ignore:
Timestamp:
02/04/10 04:09:54 (12 years ago)
Author:
sc
Message:

configuration:

  • BUTTON_LAYOUT converted for key up/down event notification

client_interface_button:

  • match_keys indexing added

client_interface:

  • converted to key up/down event notification
Location:
rc
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • rc/puzzlebox_brainstorms_client_interface.py

    r26 r27  
    2727import puzzlebox_brainstorms_client as client 
    2828import puzzlebox_brainstorms_client_interface_component as component 
    29 import puzzlebox_brainstorms_client_interface_button as button 
     29import puzzlebox_brainstorms_client_interface_button as interface_button 
    3030#import puzzlebox_logger 
    3131 
     
    7777                self.window_background_color = window_background_color 
    7878                 
     79                self.server_host = configuration.SERVER_HOST 
     80                self.server_port = configuration.SERVER_PORT 
     81                self.max_connection_attempts = configuration.MAX_CONNECTION_ATTEMPTS 
     82                 
    7983                if (os.name == "nt") or (os.name == "dos"): 
    8084                        self.operating_system = "windows" 
     
    9195                self.pygame.FLIP = self.FLIP 
    9296                 
    93                 self.buttons = [] 
     97                self.buttons = {} 
     98                self.match_key_index = {} 
    9499                 
    95100                self.initialize_buttons(BUTTON_LAYOUT) 
    96101                 
    97102                self.update_display() 
    98                  
    99                 #self.client = \ 
    100                    #puzzlebox_brainstorms_client.puzzlebox_brainstorms_client( 
    101                          #self.log, \ 
    102                          #configuration.SERVER_HOST, \ 
    103                          #configuration.SERVER_PORT, \ 
    104                          #configuration.MAX_CONNECTION_ATTEMPTS) 
    105                  
    106                 self.server_host = configuration.SERVER_HOST 
    107                 self.server_port = configuration.SERVER_PORT 
    108                 self.max_connection_attempts = configuration.MAX_CONNECTION_ATTEMPTS 
    109103         
    110104         
     
    116110                        os.environ['SDL_VIDEO_WINDOW_POS'] = \ 
    117111                           "%i,%i" % (self.display_window_x_coordinate, \ 
    118                                  self.display_window_y_coordinate) 
     112                                      self.display_window_y_coordinate) 
    119113                 
    120114                self.pygame.init() 
     
    167161        def initialize_buttons(self, button_layout): 
    168162                 
    169                 self.buttons = [] 
    170                  
    171                 for each in button_layout['buttons']: 
    172                         button_image = each[0] 
    173                         activated_image = each[1] 
    174                         button_x = each[2] 
    175                         button_y = each[3] 
    176                         command = each[4] 
    177                          
    178                         if ((button_image != None) and \ 
    179                             (button_image != '.') and \ 
    180                             (button_image != '..') and \ 
    181                             (os.path.exists(os.path.join(self.image_directory, button_image)))): 
     163                self.buttons = {} 
     164                self.match_key_index = {} 
     165                 
     166                for each in button_layout.keys(): 
     167                         
     168                        button = button_layout[each] 
     169                         
     170                        if ((button['button_image'] != None) and \ 
     171                            (button['button_image'] != '.') and \ 
     172                            (button['button_image'] != '..') and \ 
     173                            (os.path.exists(os.path.join(self.image_directory, button['button_image'])))): 
    182174                                 
    183                                 button_image = os.path.join(self.image_directory, button_image) 
     175                                button_image_path = \ 
     176                                   os.path.join(self.image_directory, button['button_image']) 
    184177                         
    185178                        else: 
    186179                                if self.DEBUG: 
    187180                                        print "Error: Button image does not exist:" 
    188                                         print "   %s" % os.path.join(self.image_directory, button_image) 
     181                                        print "   %s" % os.path.join(self.image_directory, button['button_image']) 
    189182                                continue 
    190183                         
    191184                         
    192                         if ((activated_image != None) and \ 
    193                             (activated_image != '.') and \ 
    194                             (activated_image != '..') and \ 
    195                             (os.path.exists(os.path.join(self.image_directory, activated_image)))): 
     185                        if ((button['activated_image'] != None) and \ 
     186                            (button['activated_image'] != '.') and \ 
     187                            (button['activated_image'] != '..') and \ 
     188                            (os.path.exists(os.path.join(self.image_directory, button['activated_image'])))): 
    196189                                 
    197                                 activated_image = os.path.join(self.image_directory, activated_image) 
     190                                activated_image_path = \ 
     191                                   os.path.join(self.image_directory, button['activated_image']) 
    198192                         
    199193                        else: 
    200194                                if self.DEBUG: 
    201195                                        print "Error: Activated button image does not exist:" 
    202                                         print "   %s" % os.path.join(self.image_directory, activated_image) 
     196                                        print "   %s" % os.path.join(self.image_directory, button['activated_image']) 
    203197                                continue 
    204198                         
    205199                         
    206                         interface_button = \ 
    207                            button.puzzlebox_brainstorms_client_interface_button( \ 
     200                        for match in button['match_keys']: 
     201                                self.match_key_index[match] = button['command'] 
     202                         
     203                         
     204                        new_button = \ 
     205                           interface_button.puzzlebox_brainstorms_client_interface_button( \ 
    208206                                   self.pygame, \ 
    209207                                   self.screen, \ 
    210                                    button_image, \ 
    211                                    activated_image, \ 
    212                                    button_x, \ 
    213                                    button_y, \ 
    214                                    command, \ 
     208                                   button_image_path, \ 
     209                                   activated_image_path, \ 
     210                                   button['image_x'], \ 
     211                                   button['image_y'], \ 
     212                                   button['command'], \ 
     213                                   button['match_keys'], \ 
    215214                                   self.DEBUG) 
    216215                         
    217216                         
    218                         self.buttons.append(interface_button) 
     217                        self.buttons[ button['command'] ] = new_button 
    219218         
    220219         
    221220        ################################################################## 
    222221         
    223         def update_button(self, command): 
    224                  
    225                 for each in self.buttons: 
    226                         if each.command == command: 
    227                                 each.activated = True 
    228                                 each.display() 
     222        def update_button(self, command, activated): 
     223                 
     224                self.buttons[command].activated=activated 
     225                self.buttons[command].display() 
     226                self.update_display() 
    229227         
    230228         
     
    249247        ################################################################## 
    250248         
    251         def print_response_and_stop(self, response): 
    252                  
    253                 if self.DEBUG: 
    254                         print "---> [Client] Server Response:", 
    255                         print response 
    256                  
    257                 #try: 
    258                         #reactor.stop() 
    259                 #except: 
    260                         #print "ERROR: Can't stop reactor that isn't running." 
    261          
    262          
    263         ################################################################## 
    264          
    265         def update_screen(self): 
    266                  
    267                 print "here" 
    268                  
    269                 # Redraw Background 
    270                 self.draw_background() 
    271                  
    272                 for each in self.buttons: 
    273                         each.activated = False 
    274                         each.display() 
    275                  
    276                  
    277                 self.update_display() 
    278          
    279          
    280         ################################################################## 
    281          
    282         def test(self): 
    283                  
    284                 print "test" 
    285          
    286          
    287         ################################################################## 
    288          
    289         def checkEvents(self): 
    290                  
    291                 self.test() 
    292                  
    293                 # Redraw Background 
    294                 self.draw_background() 
    295                  
    296                 for each in self.buttons: 
    297                         each.activated = False 
    298                         each.display() 
    299                  
    300                  
    301                 self.update_display() 
     249        def check_events(self): 
    302250                 
    303251                commands = [] 
     
    307255                        if (event.type is self.pygame.locals.QUIT): 
    308256                                reactor.stop() 
    309                                 sys.exit() 
    310257                         
    311258                         
     
    314261                                if 'key' in event.dict.keys(): 
    315262                                         
    316                                         if (event.dict['key'] == self.pygame.K_ESCAPE): 
    317                                                 sys.exit() 
    318                                          
    319                                         elif ((event.dict['key'] == self.pygame.K_UP) or \ 
    320                                                         (event.dict['key'] == self.pygame.K_w)): 
    321                                                 command = 'drive_forward' 
    322                                                 self.update_button(command) 
     263                                        key_pressed = event.dict['key'] 
     264                                         
     265                                        if (key_pressed == self.pygame.K_ESCAPE): 
     266                                                reactor.stop() 
     267                                         
     268                                         
     269                                        elif (key_pressed in self.match_key_index.keys()): 
     270                                                 
     271                                                # keypress matches recognized key 
     272                                                command = self.match_key_index[key_pressed] 
     273                                                self.update_button(command, activated=True) 
    323274                                                commands.append(command) 
    324                                          
    325                                         elif ((event.dict['key'] == self.pygame.K_DOWN) or \ 
    326                                                         (event.dict['key'] == self.pygame.K_s) or \ 
    327                                                         (event.dict['key'] == self.pygame.K_x)): 
    328                                                 command = 'drive_reverse' 
    329                                                 self.update_button(command) 
    330                                                 commands.append(command) 
    331                                          
    332                                         elif ((event.dict['key'] == self.pygame.K_LEFT) or \ 
    333                                                         (event.dict['key'] == self.pygame.K_a) or \ 
    334                                                         (event.dict['key'] == self.pygame.K_q)): 
    335                                                 command = 'turn_left' 
    336                                                 self.update_button(command) 
    337                                                 commands.append(command) 
    338                                          
    339                                         elif ((event.dict['key'] == self.pygame.K_RIGHT) or \ 
    340                                                         (event.dict['key'] == self.pygame.K_d) or \ 
    341                                                         (event.dict['key'] == self.pygame.K_e)): 
    342                                                 command = 'turn_right' 
    343                                                 self.update_button(command) 
    344                                                 commands.append(command) 
    345                                          
    346                                         elif (event.dict['key'] == self.pygame.K_z): 
    347                                                 command = 'turn_left_in_reverse' 
    348                                                 self.update_button(command) 
    349                                                 commands.append(command) 
    350                                          
    351                                         elif ((event.dict['key'] == self.pygame.K_PAGEDOWN) or \ 
    352                                                         (event.dict['key'] == self.pygame.K_c)): 
    353                                                 command = 'turn_right_in_reverse' 
    354                                                 self.update_button(command) 
    355                                                 commands.append(command) 
     275                         
     276                         
     277                        elif (event.type == self.pygame.locals.KEYUP): 
     278                                 
     279                                if 'key' in event.dict.keys(): 
     280                                         
     281                                        key_pressed = event.dict['key'] 
     282                                         
     283                                        if (key_pressed in self.match_key_index.keys()): 
     284                                                 
     285                                                # keypress matches recognized key 
     286                                                command = self.match_key_index[key_pressed] 
     287                                                self.update_button(command, activated=False) 
    356288                 
    357289                 
    358290                if commands != []: 
    359                         self.update_display() 
    360291                        self.send_commands_to_server(commands) 
    361                         #self.update_screen() 
    362                  
    363                  
    364                 reactor.callLater(0.03, self.checkEvents) 
     292                 
     293                 
     294                # Sleep timer provides approximately 33.3 fps 
     295                reactor.callLater(0.03, self.check_events) 
    365296 
    366297 
     
    417348                                             DEBUG=DEBUG) 
    418349         
    419         reactor.callWhenRunning(interface.checkEvents) 
     350        reactor.callWhenRunning(interface.check_events) 
    420351        reactor.run() 
    421352 
  • rc/puzzlebox_brainstorms_client_interface_button.py

    r25 r27  
    1111# For more information please refer to http://www.gnu.org/copyleft/gpl.htm 
    1212# 
    13 # Last Update: 2010.02.01 
     13# Last Update: 2010.02.03 
    1414# 
    1515##################################################################### 
     
    3030                           y, \ 
    3131                           command, \ 
     32                           match_keys, \ 
    3233                           DEBUG = 0): 
    3334                 
     
    5859                 
    5960                self.command = command 
     61                self.match_keys = match_keys 
    6062                 
    6163                self.hits = 0 
  • rc/puzzlebox_brainstorms_configuration.py

    r26 r27  
    1111# For more information please refer to http://www.gnu.org/copyleft/gpl.htm 
    1212# 
    13 # Last Update: 2010.02.01 
     13# Last Update: 2010.02.03 
    1414# 
    1515##################################################################### 
    1616 
    1717import os 
     18import pygame 
    1819 
    1920##################################################################### 
     
    9899IMAGE_DIRECTORY = os.path.join(os.getcwd(), 'images') 
    99100 
     101# Keyboard key reference at http://www.pygame.org/docs/ref/key.html#pygame.key 
    100102BUTTON_LAYOUT = { \ 
    101         'name': 'Button Layout', \ 
    102         'buttons': [ \ 
    103                      ['1-upper_left-white.png', '1-upper_left-orange.png', 
    104                        0, 0, 'turn_left'], \ 
    105                      ['2-up-white.png', '2-up-orange.png', \ 
    106                        98, 0, 'drive_forward'], \ 
    107                      ['3-upper_right-white.png', '3-upper_right-orange.png', \ 
    108                        157, 0, 'turn_right'], \ 
    109                      ['7-lower_left-white.png', '7-lower_left-orange.png', \ 
    110                        0, 220, 'turn_left_in_reverse'], \ 
    111                      ['8-down-white.png', '8-down-orange.png', \ 
    112                        98, 220, 'drive_reverse'], \ 
    113                      ['9-lower_right-white.png', '9-lower_right-orange.png', \ 
    114                        157, 220, 'turn_right_in_reverse'], \ 
    115                    ] 
    116 } 
     103         
     104        'left': { \ 
     105                'command': 'turn_left', \ 
     106                'active': False, \ 
     107                'button_image': '1-upper_left-white.png', \ 
     108                'activated_image': '1-upper_left-orange.png', \ 
     109                'image_x': 0, \ 
     110                'image_y': 0, \ 
     111                'match_keys': [pygame.K_LEFT, pygame.K_a, pygame.K_q] 
     112                }, \ 
     113         
     114        'forward': { \ 
     115                'command': 'drive_forward', \ 
     116                'active': False, \ 
     117                'button_image': '2-up-white.png', \ 
     118                'activated_image': '2-up-orange.png', \ 
     119                'image_x': 98, \ 
     120                'image_y': 0, \ 
     121                'match_keys': [pygame.K_UP, pygame.K_w] 
     122                }, \ 
     123         
     124        'right': { \ 
     125                'command': 'turn_right', \ 
     126                'active': False, \ 
     127                'button_image': '3-upper_right-white.png', \ 
     128                'activated_image': '3-upper_right-orange.png', \ 
     129                'image_x': 157, \ 
     130                'image_y': 0, \ 
     131                'match_keys': [pygame.K_RIGHT, pygame.K_d, pygame.K_e] 
     132                }, \ 
     133         
     134        'reverse_left': { \ 
     135                'command': 'turn_left_in_reverse', \ 
     136                'active': False, \ 
     137                'button_image': '7-lower_left-white.png', \ 
     138                'activated_image': '7-lower_left-orange.png', \ 
     139                'image_x': 0, \ 
     140                'image_y': 220, \ 
     141                'match_keys': [pygame.K_z] 
     142                }, \ 
     143         
     144        'reverse': { \ 
     145                'command': 'drive_reverse', \ 
     146                'active': False, \ 
     147                'button_image': '8-down-white.png', \ 
     148                'activated_image': '8-down-orange.png', \ 
     149                'image_x': 98, \ 
     150                'image_y': 220, \ 
     151                'match_keys': [pygame.K_DOWN, pygame.K_s, pygame.K_x] 
     152                }, \ 
     153         
     154        'reverse_right': { \ 
     155                'command': 'turn_right_in_reverse', \ 
     156                'active': False, \ 
     157                'button_image': '9-lower_right-white.png', \ 
     158                'activated_image': '9-lower_right-orange.png', \ 
     159                'image_x': 157, \ 
     160                'image_y': 220, \ 
     161                'match_keys': [pygame.K_PAGEDOWN, pygame.K_c] 
     162                }, \ 
     163         
     164} # BUTTON_LAYOUT 
     165 
Note: See TracChangeset for help on using the changeset viewer.