Mercurial > nagslang
changeset 18:9ecb1d222ee0
Screens.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sun, 01 Sep 2013 14:48:21 +0200 |
parents | b0644173d0aa |
children | 113f31bd9d49 |
files | nagslang/area.py nagslang/engine.py nagslang/events.py nagslang/screens/__init__.py nagslang/screens/area.py nagslang/screens/base.py nagslang/screens/menu.py |
diffstat | 6 files changed, 83 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/nagslang/area.py Sun Sep 01 14:36:18 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -"""A screen or area in which action happens.""" - -import pymunk - - -class Area(object): - - def __init__(self): - self.space = pymunk.Space() - - def render(self, surface): - pass - - def tick(self, step): - """Step the given amount of time.""" - self.space.step(step)
--- a/nagslang/engine.py Sun Sep 01 14:36:18 2013 +0200 +++ b/nagslang/engine.py Sun Sep 01 14:48:21 2013 +0200 @@ -1,25 +1,26 @@ """Top-level event dispatching and area transition.""" -from pygame import event -from pygame import time -import pygame.locals as pyl +import pygame from nagslang import constants +from nagslang.screens.menu import MenuScreen class Engine(object): - def __init__(self, screen): - self._screen = screen - self._clock = time.Clock() + def __init__(self, surface): + self._surface = surface + self._clock = pygame.time.Clock() self._fps = constants.FPS + self._current_area = MenuScreen() def run(self): running = True while running: - for ev in event.get(): - # TODO: dispatch these to an area - if ev.type == pyl.QUIT: + for ev in pygame.event.get(): + if ev.type == pygame.locals.QUIT: running = False - elif ev.type == pyl.KEYDOWN and ev.key == pyl.K_ESCAPE: - running = False + else: + self._current_area.handle_event(ev) + self._current_area.render(self._surface) + pygame.display.flip() self._clock.tick(self._fps)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nagslang/events.py Sun Sep 01 14:48:21 2013 +0200 @@ -0,0 +1,17 @@ +"""Events to post.""" + +from pygame import event +import pygame.locals as pyl + + +class Event(object): + TYPE = None + + @classmethod + def post(cls, **data): + ev = event.Event(cls.TYPE, **data) + event.post(ev) + + +class QuitEvent(Event): + TYPE = pyl.QUIT
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nagslang/screens/area.py Sun Sep 01 14:48:21 2013 +0200 @@ -0,0 +1,11 @@ +"""Display a game area.""" + +from nagslang.screens.base import Screen + + +class AreaScreen(Screen): + def handle_event(self, ev): + pass + + def render(self, surface): + pass
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nagslang/screens/base.py Sun Sep 01 14:48:21 2013 +0200 @@ -0,0 +1,23 @@ +"""A screen or area in which action happens.""" + +from pygame import event +import pymunk + + +class Screen(object): + + def __init__(self): + self.space = pymunk.Space() + + def post_event(self, ev): + event.post(ev) + + def handle_event(self, ev): + pass + + def render(self, surface): + pass + + def tick(self, step): + """Step the given amount of time.""" + self.space.step(step)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nagslang/screens/menu.py Sun Sep 01 14:48:21 2013 +0200 @@ -0,0 +1,20 @@ +"""Display a menu screen.""" + +from pygame.rect import Rect +from pygame.color import Color +import pygame.locals as pyl + +from nagslang.screens.base import Screen +from nagslang.events import QuitEvent + + +class MenuScreen(Screen): + + def handle_event(self, ev): + if ev.type == pyl.KEYDOWN and ev.key == pyl.K_ESCAPE: + QuitEvent.post() + + def render(self, surface): + color = Color(255, 0, 0) + rect = Rect(10, 10, 200, 200) + surface.fill(color, rect)