Changeset 20:347667c941de
- Timestamp:
- 09/01/13 13:18:11 (7 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- nagslang
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
nagslang/engine.py
r18 r20 5 5 from nagslang import constants 6 6 from nagslang.screens.menu import MenuScreen 7 from nagslang.screens.area import AreaScreen 8 from nagslang.events import ScreenChange 7 9 8 10 … … 12 14 self._clock = pygame.time.Clock() 13 15 self._fps = constants.FPS 14 self._current_area = MenuScreen() 16 self._world = None # TODO: create the world 17 self._current_screen = None 18 self._screens = { 19 'menu': MenuScreen, 20 'level1': AreaScreen, 21 } 22 self.change_screen('menu') 23 24 def change_screen(self, new_screen): 25 if self._current_screen is not None: 26 self._current_screen.teardown() 27 self._current_screen = self._screens[new_screen]() 28 self._current_screen.setup(self._world) 15 29 16 30 def run(self): … … 20 34 if ev.type == pygame.locals.QUIT: 21 35 running = False 36 elif ScreenChange.matches(ev): 37 self.change_screen(ev.screen) 22 38 else: 23 self._current_ area.handle_event(ev)24 self._current_ area.render(self._surface)39 self._current_screen.handle_event(ev) 40 self._current_screen.render(self._surface) 25 41 pygame.display.flip() 26 42 self._clock.tick(self._fps) -
nagslang/events.py
r18 r20 1 1 """Events to post.""" 2 2 3 from pygame import event 4 import pygame.locals as pyl 3 import pygame 5 4 6 5 … … 10 9 @classmethod 11 10 def post(cls, **data): 12 ev = event.Event(cls.TYPE, **data) 13 event.post(ev) 11 ev = pygame.event.Event(cls.TYPE, **data) 12 pygame.event.post(ev) 13 14 @classmethod 15 def matches(cls, ev): 16 return ev.type == cls.TYPE 14 17 15 18 16 19 class QuitEvent(Event): 17 TYPE = pyl.QUIT 20 TYPE = pygame.locals.QUIT 21 22 23 class UserEvent(Event): 24 TYPE = pygame.locals.USEREVENT 25 26 @classmethod 27 def post(cls, **data): 28 super(UserEvent, cls).post(user_type=cls.__name__, **data) 29 30 @classmethod 31 def matches(cls, ev): 32 return (super(UserEvent, cls).matches(ev) 33 and ev.user_type == cls.__name__) 34 35 36 class ScreenChange(UserEvent): 37 @classmethod 38 def post(cls, new_screen): 39 super(ScreenChange, cls).post(screen=new_screen) -
nagslang/screens/area.py
r18 r20 1 1 """Display a game area.""" 2 2 3 import pygame 4 3 5 from nagslang.screens.base import Screen 6 from nagslang.events import ScreenChange 4 7 5 8 6 9 class AreaScreen(Screen): 7 10 def handle_event(self, ev): 8 pass 11 if ev.type == pygame.locals.KEYDOWN: 12 if ev.key == pygame.locals.K_ESCAPE: 13 ScreenChange.post('menu') 9 14 10 15 def render(self, surface): 11 pass16 surface.fill(pygame.color.Color(0, 0, 0)) -
nagslang/screens/base.py
r18 r20 9 9 def __init__(self): 10 10 self.space = pymunk.Space() 11 12 def setup(self, world): 13 """Perform setup based on the world state.""" 14 pass 15 16 def teardown(self): 17 pass 11 18 12 19 def post_event(self, ev): -
nagslang/screens/menu.py
r19 r20 4 4 5 5 from nagslang.screens.base import Screen 6 from nagslang.events import QuitEvent 6 from nagslang.events import QuitEvent, ScreenChange 7 7 8 8 … … 10 10 11 11 def handle_event(self, ev): 12 if (ev.type == pygame.locals.KEYDOWN 13 and ev.key == pygame.locals.K_ESCAPE): 14 QuitEvent.post() 12 if ev.type == pygame.locals.KEYDOWN: 13 if ev.key == pygame.locals.K_ESCAPE: 14 QuitEvent.post() 15 elif ev.key == pygame.locals.K_1: 16 ScreenChange.post('level1') 15 17 16 18 def render(self, surface):
Note:
See TracChangeset
for help on using the changeset viewer.