annotate nagslang/screens/area.py @ 27:3e4d8091268c

A werewolf always knows where she's going.
author Simon Cross <hodgestar@gmail.com>
date Sun, 01 Sep 2013 16:03:04 +0200
parents e93eac7cf8c2
children 2995723e8ccf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
9ecb1d222ee0 Screens.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 """Display a game area."""
9ecb1d222ee0 Screens.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2
27
3e4d8091268c A werewolf always knows where she's going.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
3 import math
3e4d8091268c A werewolf always knows where she's going.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
4
20
347667c941de Hook up area.
Simon Cross <hodgestar@gmail.com>
parents: 18
diff changeset
5 import pygame
21
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
6 import pymunk
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
7 import pymunk.pygame_util
20
347667c941de Hook up area.
Simon Cross <hodgestar@gmail.com>
parents: 18
diff changeset
8
18
9ecb1d222ee0 Screens.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
9 from nagslang.screens.base import Screen
20
347667c941de Hook up area.
Simon Cross <hodgestar@gmail.com>
parents: 18
diff changeset
10 from nagslang.events import ScreenChange
18
9ecb1d222ee0 Screens.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
11
9ecb1d222ee0 Screens.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
12
9ecb1d222ee0 Screens.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
13 class AreaScreen(Screen):
21
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
14
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
15 def setup(self, world):
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
16 self.add_walls(world)
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
17 self.add_protagonist(world)
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
18
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
19 def add_walls(self, world):
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
20 self.walls = []
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
21 body = pymunk.Body()
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
22 body.position = (400, 300)
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
23 corners = [(-200, -150), (-200, 150), (200, 150), (200, -150)]
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
24 corner = corners[-1]
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
25 for next_corner in corners:
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
26 self.walls.append(pymunk.Segment(body, corner, next_corner, 5))
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
27 corner = next_corner
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
28 self.space.add(*self.walls)
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
29
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
30 def add_protagonist(self, world):
25
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
31 self.protagonist_body = pymunk.Body(100, 1000)
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
32 self.protagonist_body.position = (400, 300)
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
33 self.protagonist = pymunk.Circle(self.protagonist_body, 30)
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
34 self.space.add(self.protagonist_body, self.protagonist)
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
35
27
3e4d8091268c A werewolf always knows where she's going.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
36 def protagonist_move(self, dx, dy, angle):
3e4d8091268c A werewolf always knows where she's going.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
37 self.protagonist_body.angle = angle
25
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
38 self.protagonist_body.apply_impulse((dx * 2000, dy * 2000))
21
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
39
18
9ecb1d222ee0 Screens.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
40 def handle_event(self, ev):
20
347667c941de Hook up area.
Simon Cross <hodgestar@gmail.com>
parents: 18
diff changeset
41 if ev.type == pygame.locals.KEYDOWN:
347667c941de Hook up area.
Simon Cross <hodgestar@gmail.com>
parents: 18
diff changeset
42 if ev.key == pygame.locals.K_ESCAPE:
347667c941de Hook up area.
Simon Cross <hodgestar@gmail.com>
parents: 18
diff changeset
43 ScreenChange.post('menu')
25
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
44 elif ev.key == pygame.locals.K_UP:
27
3e4d8091268c A werewolf always knows where she's going.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
45 self.protagonist_move(0, 1, math.pi / 2)
25
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
46 elif ev.key == pygame.locals.K_DOWN:
27
3e4d8091268c A werewolf always knows where she's going.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
47 self.protagonist_move(0, -1, -math.pi / 2)
25
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
48 elif ev.key == pygame.locals.K_LEFT:
27
3e4d8091268c A werewolf always knows where she's going.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
49 self.protagonist_move(-1, 0, math.pi)
25
e93eac7cf8c2 Consider a spherical werewolf.
Simon Cross <hodgestar@gmail.com>
parents: 21
diff changeset
50 elif ev.key == pygame.locals.K_RIGHT:
27
3e4d8091268c A werewolf always knows where she's going.
Simon Cross <hodgestar@gmail.com>
parents: 25
diff changeset
51 self.protagonist_move(1, 0, 0)
18
9ecb1d222ee0 Screens.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
52
9ecb1d222ee0 Screens.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
53 def render(self, surface):
20
347667c941de Hook up area.
Simon Cross <hodgestar@gmail.com>
parents: 18
diff changeset
54 surface.fill(pygame.color.Color(0, 0, 0))
21
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
55 pymunk.pygame_util.draw(surface, *self.walls)
1b048d2a8411 Fake area.
Simon Cross <hodgestar@gmail.com>
parents: 20
diff changeset
56 pymunk.pygame_util.draw(surface, self.protagonist)