comparison gamelib/loadlevel.py @ 416:c6dd21b75bf5

The buggy load level screen lands
author Neil Muller <drnlmuller@gmail.com>
date Sat, 21 Nov 2009 12:58:19 +0000
parents 1e24eedbf40f
children 1861035300de
comparison
equal deleted inserted replaced
415:8f012ef1f64f 416:c6dd21b75bf5
6 import constants 6 import constants
7 import level 7 import level
8 import engine 8 import engine
9 import data 9 import data
10 import imagecache 10 import imagecache
11 import tiles
11 12
12 def make_load_screen(level): 13 def make_load_screen(level):
13 """Create a screen for selecting the levels""" 14 """Create a screen for selecting the levels"""
14 load_screen = LoadScreen(level, width=600) 15 load_screen = LoadScreen(level, width=600)
15 16
25 pygame.display.get_surface().blit(splash, (0, 0)) 26 pygame.display.get_surface().blit(splash, (0, 0))
26 gui.Container.paint(self, s) 27 gui.Container.paint(self, s)
27 28
28 class LoadScreen(gui.Document): 29 class LoadScreen(gui.Document):
29 def __init__(self, start_level, **params): 30 def __init__(self, start_level, **params):
30 self.levels = {} 31 gui.Document.__init__(self, **params)
31 self.cur_level = start_level 32
33 self.levels = []
34 self.cur_level = None
32 for name in os.listdir(data.filepath('levels/')): 35 for name in os.listdir(data.filepath('levels/')):
33 if name.endswith('.conf'): 36 if name.endswith('.conf'):
34 try: 37 try:
35 this_level = level.Level(name) 38 this_level = level.Level(name)
36 except RuntimeError: 39 except RuntimeError:
37 continue # Skip levels that fail to load 40 continue # Skip levels that fail to load
38 if os.path.exists(this_level.map): 41 if os.path.exists(this_level.map):
39 # Skip level if we can't see the map 42 # Skip level if we can't see the map
40 self.levels[this_level.level_name] = this_level 43 self.levels.append(this_level)
41 if not start_level.level_name in self.levels: 44 if this_level.level_name == start_level.level_name:
42 print 'Start level not found' 45 self.cur_level = this_level
43 46
44 self.cur_level = self.levels.values()[0] 47 if not self.cur_level:
48 self.cur_level = self.levels[0]
45 49
46 gui.Document.__init__(self, **params) 50 self.tv = tiles.FarmVid()
51 self.tv.png_folder_load_tiles('tiles')
52
47 53
48 def done_pressed(): 54 def done_pressed():
49 pygame.event.post(engine.DO_LOAD_LEVEL) 55 pygame.event.post(engine.DO_LOAD_LEVEL)
50 56
51 def cancel_pressed(): 57 def cancel_pressed():
52 pygame.event.post(engine.GO_MAIN_MENU) 58 pygame.event.post(engine.GO_MAIN_MENU)
53 59
54 done_button = gui.Button("Load This Level") 60 def next_pressed():
55 done_button.connect(gui.CLICK, done_pressed) 61 self.next_level()
62
63 def prev_pressed():
64 self.prev_level()
65
66 self.next_button = gui.Button("Next Level >>")
67 self.next_button.connect(gui.CLICK, next_pressed)
68
69 self.prev_button = gui.Button("<< Prev Level")
70 self.prev_button.connect(gui.CLICK, prev_pressed)
71
72 self.cancel_button = gui.Button("Cancel & return to main menu")
73 self.cancel_button.connect(gui.CLICK, cancel_pressed)
74
75 self.done_button = gui.Button("Load This Level")
76 self.done_button.connect(gui.CLICK, done_pressed)
56 77
57 cancel_button = gui.Button("Cancel & return to main menu") 78 cancel_button = gui.Button("Cancel & return to main menu")
58 cancel_button.connect(gui.CLICK, cancel_pressed) 79 cancel_button.connect(gui.CLICK, cancel_pressed)
59 80
60 self.add(done_button, align=0) 81 self.render_level()
61 self.add(cancel_button, align=0)
62 82
63 def get_level(self):
64 return self.cur_level_name
65 83
84 def next_level(self):
85 pos = self.levels.index(self.cur_level) + 1
86 if pos == len(self.levels):
87 pos = 0
88 self.cur_level = self.levels[pos]
89 self.render_level()
90
91 def prev_level(self):
92 pos = self.levels.index(self.cur_level) - 1
93 if pos == -1:
94 pos = len(self.levels) - 1
95 self.cur_level = self.levels[pos]
96 self.render_level()
97
98 def render_level(self):
99 self.tv.tga_load_level(self.cur_level.map)
100 self.clear()
101 self.repaint()
102
103 space = self.style.font.size(" ")
104
105 map_image = pygame.Surface((800, 800))
106 self.tv.paint(map_image)
107
108 style = {
109 'width' : 300,
110 'height' : 300
111 }
112
113 image = gui.Image(map_image, style=style)
114
115 self.block(align=0)
116 self.add(image)
117
118 self.block(align=0)
119 self.add(gui.Label(self.cur_level.level_name))
120 self.block(align=-1)
121 for word in self.cur_level.goal.split():
122 self.add(gui.Label(word))
123 self.space(space)
124
125 self.block(align=0)
126 self.add(self.prev_button)
127 self.space(space)
128 self.add(self.done_button)
129 self.space(space)
130 self.add(self.cancel_button)
131 self.space(space)
132 self.add(self.next_button)
133
134 def clear(self):
135 """Clear the document"""
136 for widget in self.widgets[:]:
137 self.remove(widget)
138
139
140