-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplayer.py
81 lines (66 loc) · 2.5 KB
/
player.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import pygame
from character import *
from animator import *
from timed_event import *
WEAPON_LAYER = 1
class Player(Character):
_attack_event = TimedEvent(500)
_attack_rect = pygame.Rect(0, 0, 0, 0)
speed = 4
MAX_HEALTH = 10
health = MAX_HEALTH
def draw(self, screen, tilemap):
Character.draw(self, screen, tilemap)
if self.is_in_attack():
offsetx, offsety = tilemap.get_offset()
rect = self._attack_rect.move(-offsetx, -offsety)
sprite = get_animated_tile_image(self._sprites, self.get_facing(), 0, WEAPON_LAYER, self._update_time)
#self._sprites.get_tile_image(self.get_facing(), 0, WEAPON_LAYER)
screen.blit(sprite, rect)
def is_in_attack(self):
return self._attack_event.is_active()
def attack(self, enemies):
# Has enough time passed since the last attack?
if self.is_in_attack():
return
# Compute the rect for the attack.
self._attack_rect = self.get_rect()
offsetx, offsety = FACING_DIRECTIONS[self.get_facing()]
offsetx *= self._attack_rect.width
offsety *= self._attack_rect.height
self._attack_rect.move_ip(offsetx, offsety)
# Test to see if enemies are hit.
for enemy in enemies:
enemy_rect = enemy.get_rect()
if enemy_rect.colliderect(self._attack_rect):
enemy.hit()
# Update our last attack time.
self._attack_event.trigger()
# Reset attack animation.
props = self._sprites.get_tile_properties(self.get_facing(), 0, WEAPON_LAYER)
reset_animation(props)
def hit(self):
if self.is_invul():
return
self.health -= 1
self.go_invul()
def move(self, tilemap, rel_x, rel_y):
if self.is_in_attack():
return False
return Character.move(self, tilemap, rel_x, rel_y)
def handle_input(self, keys, released):
x, y = 0, 0
tilemap = self._game.get_tilemap()
if keys[pygame.K_LEFT]:
x -= self.speed
if keys[pygame.K_RIGHT]:
x += self.speed
if keys[pygame.K_UP]:
y -= self.speed
if keys[pygame.K_DOWN]:
y += self.speed
if released[pygame.K_SPACE]:
self.attack(self._game.get_tilemap().enemies)
if self.move(tilemap, x, y):
rect = self.get_rect()
tilemap.set_center(rect.centerx, rect.centery)