Mercurial > jelly
changeset 21:93c6faab5f90
Dummy inventory menu
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Thu, 15 Mar 2012 21:25:50 +0100 |
| parents | d7a7310dc674 |
| children | 40dbaddd1239 |
| files | jelly/__init__.py jelly/display.py jelly/message.py jelly/mobs.py |
| diffstat | 4 files changed, 76 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/jelly/__init__.py Thu Mar 15 20:41:00 2012 +0100 +++ b/jelly/__init__.py Thu Mar 15 21:25:50 2012 +0100 @@ -41,10 +41,10 @@ self.display.update() self.display.draw() choice = menu.update() - except (util.QuitLevel, util.QuitGame): - raise util.QuitGame - if choice == 1: - raise util.QuitGame + except util.QuitLevel: + raise util.QuitGame() + if choice == 1 or choice is False: + raise util.QuitGame() def start(self): self.display.render_image('jelly/title.png') @@ -54,10 +54,32 @@ self.display.render_image('jelly/dead.png') self.game_menu() + def victory(self): + self.display.render_image('jelly/finish.png') + self.game_menu() + def next_level(self): + self.pc.level += 1 + if self.pc.level > 10: + return True self.level = rooms_level.Level(self.pc) self.display.render_level(self.level) + def quit_menu(self): + menu = message.Menu((200, 100), ['Continue playing', 'Exit to title']) + self.display.render_menu(menu) + choice = None + try: + while choice is None: + self.clock.tick(15) + self.display.update() + self.display.draw() + choice = menu.update() + except util.QuitLevel: + return + if choice == 1: + raise util.QuitLevel() + def main(self): self.pc = mobs.Player() self.next_level() @@ -73,7 +95,8 @@ elif event.type == pg.KEYDOWN and event.key == pg.K_n: self.next_level() elif event.type == pg.KEYDOWN and event.key == pg.K_ESCAPE: - raise util.QuitLevel() + self.quit_menu() + self.display.refresh() try: pc_animation = self.display.mob_sprites[id(self.pc)].animations except KeyError: @@ -81,7 +104,7 @@ self.display.events(self.level.events) self.level.events = [] if not pc_animation: - if self.pc.control(self.level): + if self.pc.control(self.level, self.display): for mob in list(self.level.mobs): if mob == self.pc: continue
--- a/jelly/display.py Thu Mar 15 20:41:00 2012 +0100 +++ b/jelly/display.py Thu Mar 15 21:25:50 2012 +0100 @@ -45,12 +45,13 @@ self.fog = None self.background = pygame.image.load(image_file).convert() self.sprites = SortedUpdates() + self.hud = SortedUpdates() self.shadows = pygame.sprite.RenderUpdates() self.lights = pygame.sprite.LayeredDirty() def render_menu(self, menu): for sprite in menu.sprites: - self.sprites.add(sprite) + self.hud.add(sprite) def render_level(self, level): self.first_draw = True @@ -60,6 +61,7 @@ (64, 128, 255), (16, 64, 224)) self.memory = self.fog.copy() self.sprites = SortedUpdates() + self.hud = SortedUpdates() self.shadows = pygame.sprite.RenderUpdates() self.dirty = [] self.mob_sprites = weakref.WeakValueDictionary() @@ -99,6 +101,7 @@ if self.fog: self.lights.draw(self.fog) self.screen.blit(self.fog, (0, 0)) + self.hud.draw(self.screen) pygame.display.update() self.dirty = [] @@ -108,6 +111,7 @@ self.first_draw = False else: if self.fog: + self.hud.clear(self.screen, self.memory) self.lights.clear(self.fog, self.memory) visible = self.lights.draw(self.fog) self.dirty.extend(visible) @@ -118,9 +122,11 @@ for rect in self.dirty: self.screen.blit(self.fog, rect.topleft, rect) else: + self.hud.clear(self.screen, self.background) self.sprites.clear(self.screen, self.background) self.shadows.draw(self.screen) self.dirty.extend(self.sprites.draw(self.screen)) + self.dirty.extend(self.hud.draw(self.screen)) pygame.display.update(self.dirty) self.dirty = [] @@ -128,6 +134,7 @@ self.sprites.update() self.shadows.update() self.lights.update() + self.hud.update() def events(self, events): for event in events:
--- a/jelly/message.py Thu Mar 15 20:41:00 2012 +0100 +++ b/jelly/message.py Thu Mar 15 21:25:50 2012 +0100 @@ -104,12 +104,19 @@ width = text.rect.width self.cursor = Cursor((pos[0] + 10, pos[1] + 14)) self.sprites.append(self.cursor) - self.window = Window(pos, (18 + width, 16 + 14 * len(items))) + self.window = Window(pos, (21 + width, 16 + 14 * len(items))) self.sprites.append(self.window) def move(self, di): self.cursor.item = max(0, min(len(self.items)-1, self.cursor.item + di)) + def cleanup(self): + for sprite in self.sprites: + sprite.kill() + while True: + if pygame.event.wait().type == pg.KEYUP: + return + def update(self): for event in pygame.event.get(): if event.type == pg.KEYDOWN and event.key == pg.K_UP: @@ -118,12 +125,16 @@ self.move(1) elif event.type == pg.KEYDOWN and event.key == pg.K_z: item = self.cursor.item - for sprite in self.sprites: - sprite.kill() + self.cleanup() return item + elif event.type == pg.KEYDOWN and event.key == pg.K_x: + self.cleanup() + return False elif event.type == pg.QUIT: + self.cleanup() raise util.QuitGame() elif event.type == pg.KEYDOWN and event.key == pg.K_ESCAPE: + self.cleanup() raise util.QuitLevel() return None
--- a/jelly/mobs.py Thu Mar 15 20:41:00 2012 +0100 +++ b/jelly/mobs.py Thu Mar 15 21:25:50 2012 +0100 @@ -7,6 +7,7 @@ from pygame import locals as pg from jelly import sprites +from jelly import message from jelly.util import DX, DY, dist, pos2dir, dist2 @@ -191,8 +192,15 @@ color = 5 def __init__(self): + self.level = 0 self.max_hp = 100 self.hp = self.max_hp + self.items = [ + 'Aaaaa', + 'Bbbbb', + 'Ccccc', + 'Ddddd', + ] def place(self, (x, y)): @@ -206,10 +214,25 @@ level.game_over() return True - def control(self, level): + def inventory_menu(self, display): + menu = message.Menu((480, 20), self.items) + display.render_menu(menu) + choice = None + clock = pygame.time.Clock() + while choice is None: + clock.tick(15) + display.update() + display.draw() + choice = menu.update() + display.refresh() + + def control(self, level, display): direction = None keys = pygame.key.get_pressed() - if keys[pg.K_DOWN] and keys[pg.K_LEFT]: + if keys[pg.K_x]: + self.inventory_menu(display) + return False + elif keys[pg.K_DOWN] and keys[pg.K_LEFT]: direction = 1 elif keys[pg.K_UP] and keys[pg.K_LEFT]: direction = 3
