forked from StanislavPetrovV/SpriteStacking
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplayer.py
More file actions
81 lines (52 loc) · 1.8 KB
/
player.py
File metadata and controls
81 lines (52 loc) · 1.8 KB
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
from settings import *
import math
from entity import BaseEntity
from bullet import Bullet
class Player(BaseEntity):
def __init__(self, app, name='player'):
super().__init__(app, name)
self.group.change_layer(self, CENTER.y)
self.rect = self.image.get_rect(center=CENTER)
self.offset = vec2(0)
self.inc = vec2(0)
self.prev_inc = vec2(0)
self.angle = 0
self.diag_move_corr = 1 / math.sqrt(2)
def control(self):
self.inc = vec2(0)
speed = PLAYER_SPEED * self.app.delta_time
rot_speed = PLAYER_ROT_SPEED * self.app.delta_time
key_state = pg.key.get_pressed()
if key_state[pg.K_LEFT]:
self.angle += rot_speed
if key_state[pg.K_RIGHT]:
self.angle -= rot_speed
if key_state[pg.K_w]:
self.inc += vec2(0, -speed)
if key_state[pg.K_s]:
self.inc += vec2(0, speed)
if key_state[pg.K_a]:
self.inc += vec2(-speed, 0)
if key_state[pg.K_d]:
self.inc += vec2(speed, 0)
if self.inc.x and self.inc.y:
self.inc *= self.diag_move_corr
self.inc.rotate_ip_rad(-self.angle)
def single_fire(self, event):
if event.key == pg.K_UP:
Bullet(app=self.app)
def check_collision(self):
hit = pg.sprite.spritecollide(self, self.app.collision_group,
dokill=False, collided=pg.sprite.collide_mask)
if not hit:
if self.inc.x or self.inc.y:
self.prev_inc = self.inc
else:
self.inc = -self.prev_inc
def update(self):
super().update()
self.control()
self.check_collision()
self.move()
def move(self):
self.offset += self.inc