source: rc/puzzlebox_brainstorms_client_interface.py @ 15

Last change on this file since 15 was 15, checked in by sc, 12 years ago

client_interface:

  • minor typo
  • Property svn:executable set to *
File size: 8.5 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3#
4# Puzzlebox - Brainstorms - Client Interface
5#
6# Copyright Puzzlebox Productions, LLC (2010)
7#
8# Portions of this code have been previously
9# released under the GNU Pulic License (GPL) version 2
10# and is Copyright Steven M. Castellotti (2010)
11# For more information please refer to http://www.gnu.org/copyleft/gpl.htm
12#
13# Last Update: 2010.02.01
14#
15#####################################################################
16
17import os, sys
18
19import pygame
20#import pygame.font
21import pygame.image
22import pygame.locals
23
24import puzzlebox_brainstorms_configuration as configuration
25import puzzlebox_brainstorms_client
26#import puzzlebox_logger
27
28#####################################################################
29# Globals
30#####################################################################
31
32DEBUG = 1
33
34FLIP = 1
35
36SERVER_HOST = configuration.SERVER_HOST
37SERVER_PORT = configuration.SERVER_PORT
38
39DISPLAY_WINDOW_X_COORDINATE = configuration.DISPLAY_WINDOW_X_COORDINATE
40DISPLAY_WINDOW_Y_COORDINATE = configuration.DISPLAY_WINDOW_Y_COORDINATE
41DISPLAY_WINDOW_X_DIMENSION = configuration.DISPLAY_WINDOW_X_DIMENSION
42DISPLAY_WINDOW_Y_DIMENSION = configuration.DISPLAY_WINDOW_Y_DIMENSION
43
44WINDOW_BACKGROUND_COLOR = configuration.WINDOW_BACKGROUND_COLOR
45
46#####################################################################
47# Classes
48#####################################################################
49
50class puzzlebox_brainstorms_client_interface:
51       
52        def __init__(self, log, \
53                     display_window_x_coordinate, \
54                     display_window_y_coordinate, \
55                     display_window_x_dimension, \
56                     display_window_y_dimension, \
57                     window_background_color, \
58                     DEBUG=DEBUG):
59       
60                self.log = log
61                self.DEBUG = DEBUG
62               
63                self.display_window_x_coordinate = display_window_x_coordinate
64                self.display_window_y_coordinate = display_window_y_coordinate
65                self.display_window_x_dimension = display_window_x_dimension
66                self.display_window_y_dimension = display_window_y_dimension
67                self.window_background_color = window_background_color
68               
69                #self.hostname = hostname
70                #self.port = port
71                #self.service_name = service_name
72                #self.target_name = target_name
73                #self.max_connection_attempts = max_connection_attempts
74               
75                if (os.name == "nt") or (os.name == "dos"):
76                        self.operating_system = "windows"
77                else:
78                        self.operating_system = os.name
79               
80                self.initialize_pygame()
81                #self.initialize_speech()
82               
83                self.pygame.FLIP = FLIP
84               
85                #self.draw_background()
86               
87                #self.pointer = thinking_cap_pointer(self.pygame, \
88                                                                                                                #self.screen, \
89                                                                                                                #os.path.join(IMAGE_DIRECTORY, \
90                                                                                                                                                 #POINTER_IMAGE),
91                                                                                                                #self.DEBUG)
92                #self.action_message = 'Thinking Cap Demo'
93                #self.message = ''
94               
95                #self.initialize_menu(menu_letter_tree)
96               
97                #self.update_display()
98       
99       
100        #####################################################################
101       
102        def initialize_pygame(self):
103               
104                os.environ['SDL_VIDEO_WINDOW_POS'] = "%i,%i" % (self.display_window_x_coordinate, \
105                                                                                                                                                self.display_window_y_coordinate)
106               
107                pygame.init()
108               
109                if (FLIP):
110                       
111                        self.screen = pygame.display.set_mode((self.display_window_x_dimension, \
112                                                                                                                                self.display_window_y_dimension), \
113                                                                                                                                pygame.HWSURFACE|pygame.DOUBLEBUF)
114               
115                else:
116               
117                        self.screen = pygame.display.set_mode((self.display_window_x_dimension, \
118                                                                                                                                self.display_window_y_dimension), \
119                                                                                                                                pygame.HWSURFACE)
120               
121               
122                if (self.DEBUG >= 2):
123                        print "Display Driver:",
124                        print pygame.display.get_driver()
125                        print "Display Info:",
126                        print pygame.display.Info()
127                        #print "Get Flags:",
128                        #print pygame.display.screen.get_flags()
129               
130               
131                self.pygame = pygame
132                self.pygame.FLIP = FLIP
133                self.pygame.mouse.set_visible(0)
134               
135               
136                pygame.display.set_caption('Puzzlebox Brainstorms - Client Interface')
137               
138                # Set Background
139                self.background = pygame.Surface(self.screen.get_size())
140                self.background.fill(self.window_background_color)
141                #self.background.set_alpha(0)
142                self.screen.blit(self.background, (0,0))
143       
144       
145        ##################################################################
146       
147        def send_commands_to_server(self, commands):
148       
149                #client = \
150                   #puzzlebox_brainstorms_client.puzzlebox_brainstorms_client_command_line(
151                         #self.log, \
152                         #commands, \
153                         #SERVER_HOST, \
154                         #SERVER_PORT)
155                #puzzlebox_brainstorms_client.reactor.callWhenRunning(client.execute_command_line)
156                #puzzlebox_brainstorms_client.reactor.run()
157               
158                command = 'python puzzlebox_brainstorms_client.py'
159               
160                for each in commands:
161                        command = '%s %s' % (command, each)
162               
163                if self.DEBUG:
164                        print "executing: %s" % command
165               
166                os.system(command)
167       
168       
169        ##################################################################
170       
171        def start(self):
172               
173                self.update_screen = 0
174                clock = self.pygame.time.Clock()
175               
176                while 1:
177                       
178                        #update_screen = self.pointer.update()
179
180                        #if (update_screen):
181                                ## Redraw Background
182                                ##self.display_image(self.background_image)
183                                #self.draw_background()
184
185                                #for icon in self.icons:
186                                        #icon.display()
187
188                                #self.pointer.display()
189
190                                #self.draw_action_message()
191                                #self.draw_message()
192
193                                #self.update_display()
194
195
196                        #for icon in self.icons:
197                                #collision = icon.check_collision(self.pointer.location_rect())
198
199                                #if collision:
200                                        #if (icon.action != None):
201
202                                                #if self.DEBUG > 1:
203                                                        #print icon.action,
204
205                                                #if (icon.hits >= HITS_TO_CHANGE):
206                                                        #self.execute_action(icon.action)
207                                                        #icon.hits = 0
208
209
210                                                #else:
211                                                        #self.action_message = icon.action
212
213                                        #else:
214                                                #if self.DEBUG > 1:
215                                                        #print "bling!",
216
217                                        #if self.DEBUG > 1:
218                                                #print ":%i" % icon.hits
219                       
220                        commands = []
221                       
222                        for event in self.pygame.event.get():
223                               
224                                if (event.type is pygame.locals.QUIT):
225                                        sys.exit()
226                               
227                               
228                                elif (event.type == pygame.locals.KEYDOWN):
229                                       
230                                        #print event.dict
231                                       
232                                        if 'key' in event.dict.keys():
233                                               
234                                                if (event.dict['key'] == pygame.K_ESCAPE):
235                                                        sys.exit()
236                                               
237                                                elif ((event.dict['key'] == pygame.K_UP) or \
238                                                           (event.dict['key'] == pygame.K_w)):
239                                                        commands.append('drive_forward')
240                                               
241                                                elif ((event.dict['key'] == pygame.K_DOWN) or \
242                                                           (event.dict['key'] == pygame.K_s)):
243                                                        commands.append('drive_reverse')
244                                               
245                                                elif ((event.dict['key'] == pygame.K_LEFT) or \
246                                                           (event.dict['key'] == pygame.K_a)):
247                                                        commands.append('turn_left')
248                                               
249                                                elif ((event.dict['key'] == pygame.K_RIGHT) or \
250                                                           (event.dict['key'] == pygame.K_d)):
251                                                        commands.append('turn_right')
252                                               
253                                                elif ((event.dict['key'] == pygame.K_PAGEDOWN) or \
254                                                           (event.dict['key'] == pygame.K_c)):
255                                                        commands.append('turn_in_reverse')
256                       
257                       
258                        if commands != []:
259                                self.send_commands_to_server(commands)
260                       
261                        clock.tick(60)
262
263
264#####################################################################
265# Functions
266#####################################################################
267
268
269#####################################################################
270# Main
271#####################################################################
272
273if __name__ == '__main__':
274       
275        #log = puzzlebox_logger.puzzlebox_logger(logfile='mcc')
276        log = None
277       
278       
279        # Collect default settings and command line parameters
280        server_host = SERVER_HOST
281        server_port = SERVER_PORT
282        display_window_x_coordinate = DISPLAY_WINDOW_X_COORDINATE
283        display_window_y_coordinate = DISPLAY_WINDOW_Y_COORDINATE
284        display_window_x_dimension = DISPLAY_WINDOW_X_DIMENSION
285        display_window_y_dimension = DISPLAY_WINDOW_Y_DIMENSION
286        window_background_color = WINDOW_BACKGROUND_COLOR
287       
288       
289        for each in sys.argv:
290               
291                if each.startswith("--host="):
292                        server_host = each[ len("--host="): ]
293                if each.startswith("--port="):
294                        server_port = each[ len("--port="): ]
295       
296       
297        # Window Defaults
298        try:
299                display_window_x_coordinate = string.atoi(sys.argv[-4])
300                display_window_y_coordinate = string.atoi(sys.argv[-3])
301                display_window_x_dimension = string.atoi(sys.argv[-2])
302                display_window_y_dimension = string.atoi(sys.argv[-1])
303        except:
304                if DEBUG:
305                        print "Using default display coordinates"
306       
307       
308        interface = puzzlebox_brainstorms_client_interface( \
309                                             log, \
310                                             display_window_x_coordinate, \
311                                             display_window_y_coordinate, \
312                                             display_window_x_dimension, \
313                                             display_window_y_dimension, \
314                                             window_background_color, \
315                                             DEBUG=DEBUG)
316       
317        interface.start()
318
319
Note: See TracBrowser for help on using the repository browser.