3 CONFIG
= 'game_config.xml'
6 WINDOW_SIZE
= (640, 480)
7 BACKGROUND_COLOR
= (1, 0, 0, 0)
8 GUI_THEME
= 'theme_two.zip'
9 WIDGETS_FILE
= 'widgets.xml'
20 from DerGUI
import GUISystem
26 from xml
.dom
.minidom
import parse
, parseString
28 from experimental
import *
29 from ThreadQueue
import ThreadQueue
35 print "Engine.py class... more documentation to come"
39 def __init__(self
, config_file
=CONFIG
):
41 assert exists(config_file
)
42 dom
= parse(config_file
)
43 self
.config
= reduceDOM(dom
)
44 self
.config
= reduceConfig(self
.config
)
48 window_size
= WINDOW_SIZE
50 if self
.config
.has_key('window_size'):
52 window_size
= eval(self
.config
['window_size'])
54 print "Engine.__init__(): Error in eval() using default window size of", WINDOW_SIZE
56 video_flags
= OPENGL|DOUBLEBUF
57 self
.display
= pygame
.display
.set_mode(window_size
, video_flags
)
61 background_color
= BACKGROUND_COLOR
63 if self
.config
.has_key('background_color'):
65 background_color
= eval(self
.config
['background_color'])
67 print "Engine.__init__(): Error in eval(), using default background color of", BACKGROUND_COLOR
71 if self
.config
.has_key('window_title'):
72 self
.window_title
= self
.config
['window_title']
74 self
.window_title
= WINDOW_CAPTION
75 print "Engine.__init__(): No window title specified, using default of", WINDOW_CAPTION
77 pygame
.display
.set_caption(self
.window_title
)
79 # lamina and gui stuff
83 if self
.config
.has_key('gui_theme'):
84 gui_theme
= self
.config
['gui_theme']
86 print "Engine.__init__(): No gui theme specified, using default of", GUI_THEME
88 self
.lamina_screen
= lamina
.LaminaScreenSurface()
89 self
.gui_system
= GUISystem(WIDGETS_FILE
, gui_theme
)
100 if self
.config
.has_key('pack_dir'):
101 pack_dir
= self
.config
['pack_dir']
103 print "Engine.__init__(): No pack directory specified, using default of", PACK_DIR
105 for file in listdir(pack_dir
):
106 if is_zipfile(os
.path
.join(pack_dir
, file)):
107 self
.zipfiles
.append(ZipFile(os
.path
.join(pack_dir
, file)))
109 for item
in self
.zipfiles
[-1].namelist():
110 self
.filelist
[item
] = "self.zipfiles[" + str(len(self
.zipfiles
) - 1) + "].read(\"" + item
+ "\")"
127 self
.event_queue
= None
129 def addFile(self
, filename
, parent
=''):
131 if self
.filelist
.has_key(filename
):
133 dom
= parseString(eval(self
.filelist
[filename
]))
136 parsed
= reduceDOM(dom
)
143 'object_instance': [],
147 for item
in parsed
[1][0]:
151 for defx
in item
[1][0]:
153 if defx
[0] == 'object':
154 obj
= reduceObjectDef(defx
)
155 results
['object_def'][obj
['name']] = obj
156 self
.objectdefs
[obj
['name']] = obj
158 if defx
[0] == 'menu':
159 menu
= reduceMenuDef(defx
)
160 results
['menu_def'][menu
[0]] = menu
161 self
.menudefs
[menu
[0]] = menu
163 if item
[0] == 'instance':
165 for defx
in item
[1][0]:
167 inst
= reduceInstance(defx
)
168 instances
.append(inst
)
170 # do instance stuff here
171 for item
in instances
:
172 if item
[0] == 'object':
175 assert item
[1]['contents'] in self
.objectdefs
.keys()
178 for n
in item
[1].keys():
181 for n
in self
.objectdefs
[item
[1]['contents']].keys():
182 d
[n
] = self
.objectdefs
[item
[1]['contents']][n
]
184 nobject
= Entity(self
, d
)
185 results
['object_instance'].append(nobject
)
186 self
.objects
.append(nobject
)
188 results
['parent'] = parent
190 self
.files
[parent
]['children'].append(filename
)
192 self
.files
[filename
] = results
199 def readZipfile(self
, filename
):
200 assert filename
in self
.filelist
.keys()
201 return eval(self
.filelist
[filename
])
205 if self
.event_queue
== None:
206 self
.event_queue
= ThreadQueue()
208 self
.gui_system
.draw(self
.lamina_screen
.surf
)
209 self
.lamina_screen
.refresh()
215 pygame
.display
.flip()
219 def processEvents(self
):
221 for e
in pygame
.event
.get():
224 print "Engine.processEvents(): Should be quitting..."
226 self
.change
= self
.gui_system
.event(e
)
228 new_event
= convertEvent(e
)
229 self
.event_queue
.append(new_event
)
234 if len(self
.event_queue
):
235 new_event
= self
.event_queue
.pop()
239 for obj
in self
.objects
:
240 obj
.event(new_event
[0], new_event
[1])
246 self
.lamina_screen
.display()
250 if __name__
== '__main__': main()