Mercurial > rinkhals
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 |