annotate skaapsteker/sprites/player.py @ 102:2e913a89e69d

Link up key presses to calls to action functions on player and to quitting level.
author Simon Cross <hodgestar@gmail.com>
date Mon, 04 Apr 2011 20:23:14 +0200
parents 3eafceff6293
children aaef228b6358
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
1 """Class for dealing with the player"""
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
2
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
3 import pygame.transform
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
4 import os
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
5
100
3eafceff6293 Have monsters also collide with players as an interim solution while I relax, eat dinner and think about the best way to use the new collision layers.
Simon Cross <hodgestar@gmail.com>
parents: 97
diff changeset
6 from skaapsteker.sprites.base import TILE_SIZE, PC_LAYER, MONSTER_LAYER
90
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
7 from skaapsteker.physics import Sprite
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
8 from skaapsteker.constants import Layers
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
9 from skaapsteker.data import get_files, load_image
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
10
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
11
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
12 class Player(Sprite):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
13
97
a1d95c6152a0 Shiny new collision detection. Read code for usage information.
Simon Cross <hodgestar@gmail.com>
parents: 90
diff changeset
14 collision_layer = PC_LAYER
100
3eafceff6293 Have monsters also collide with players as an interim solution while I relax, eat dinner and think about the best way to use the new collision layers.
Simon Cross <hodgestar@gmail.com>
parents: 97
diff changeset
15 collides_with = set([MONSTER_LAYER])
97
a1d95c6152a0 Shiny new collision detection. Read code for usage information.
Simon Cross <hodgestar@gmail.com>
parents: 90
diff changeset
16
90
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
17 def __init__(self):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
18 Sprite.__init__(self)
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
19 self.image = None
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
20 self._image_dict = {}
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
21 # State flags and such
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
22 self.running = False
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
23 self.jumping = False
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
24 self.flying = False
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
25 self._load_images()
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
26 # We muck with these in load for convience, so ensure they're right
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
27 self.tails = 0
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
28 self.set_facing('left')
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
29 self.set_image()
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
30 self.set_pos((0, 0))
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
31 self._layer = Layers.PLAYER
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
32
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
33 def set_image(self):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
34 key = self._make_key()
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
35 # TODO: handle animations
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
36 self.image = self._image_dict[key][0]
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
37
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
38 def set_facing(self, new_facing):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
39 self.facing = new_facing
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
40
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
41 def set_pos(self, pos):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
42 self.starting_tile_pos = pos
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
43 self.rect = self.image.get_rect(topleft=(pos[0]*TILE_SIZE[0], pos[1]*TILE_SIZE[1]))
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
44
102
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
45 def action_left(self):
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
46 print "L"
90
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
47
102
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
48 def action_right(self):
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
49 print "R"
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
50
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
51 def action_up(self):
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
52 print "U"
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
53
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
54 def action_down(self):
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
55 print "D"
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
56
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
57 def action_fire1(self):
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
58 print "F1"
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
59
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
60 def action_fire2(self):
2e913a89e69d Link up key presses to calls to action functions on player and to quitting level.
Simon Cross <hodgestar@gmail.com>
parents: 100
diff changeset
61 print "F2"
90
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
62
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
63 def _get_action(self):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
64 if self.running:
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
65 return 'running'
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
66 if self.jumping:
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
67 return 'jumpin'
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
68 return 'standing'
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
69
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
70 def _make_key(self, action=None):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
71 if action is None:
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
72 action = self._get_action()
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
73 tails = self.tails
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
74 if self.tails >= 4:
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
75 tails = 4
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
76 elif self.tails >= 2:
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
77 tails = 2
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
78 return '%s %s %d' % (action, self.facing, tails)
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
79
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
80 def _load_images(self):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
81 for action in ['standing', 'running', 'jumping']:
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
82 for tails in [0, 1, 2, 4]:
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
83 self.tails = tails
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
84 directory = os.path.join('sprites',
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
85 'kitsune_%s' % action,
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
86 'kitsune_%s_%dtail' % (action, tails))
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
87 for facing in ['left', 'right']:
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
88 self.facing = facing
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
89 key = self._make_key(action)
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
90 self._image_dict[key] = []
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
91 for image_file in get_files(directory):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
92 if image_file.startswith('.'):
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
93 # Skip extra junk for now
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
94 continue
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
95 image = load_image(os.path.join(directory, image_file))
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
96 if facing == 'right':
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
97 image = pygame.transform.flip(image, True, False)
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
98 self._image_dict[key].append(image)
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
99
96ba88d66e41 Add forgetten player.py
Neil Muller <drnlmuller@gmail.com>
parents:
diff changeset
100