47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
|
import pygame as pg
|
||
|
from settings import *
|
||
|
from game_objects import utils
|
||
|
|
||
|
vec = pg.math.Vector2
|
||
|
|
||
|
class Player(pg.sprite.Sprite):
|
||
|
def __init__(self, game, x, y):
|
||
|
self.groups = game.agentSprites
|
||
|
pg.sprite.Sprite.__init__(self, self.groups)
|
||
|
self.game = game
|
||
|
self.image = game.player_img
|
||
|
self.rect = self.image.get_rect()
|
||
|
self.rect.center = (x,y)
|
||
|
self.hit_rect = PLAYER_HIT_RECT
|
||
|
self.hit_rect.center = self.rect.center
|
||
|
self.vel = vec(0, 0)
|
||
|
self.pos = vec(x, y)
|
||
|
self.rot = 0
|
||
|
|
||
|
|
||
|
def get_keys(self):
|
||
|
self.rot_speed = 0
|
||
|
self.vel = vec(0, 0)
|
||
|
keys = pg.key.get_pressed()
|
||
|
if keys[pg.K_LEFT] or keys[pg.K_a]:
|
||
|
self.rot_speed = PLAYER_ROT_SPEED
|
||
|
if keys[pg.K_RIGHT] or keys[pg.K_d]:
|
||
|
self.rot_speed = -PLAYER_ROT_SPEED
|
||
|
if keys[pg.K_UP] or keys[pg.K_w]:
|
||
|
self.vel = vec(PLAYER_SPEED, 0).rotate(-self.rot)
|
||
|
if keys[pg.K_DOWN] or keys[pg.K_s]:
|
||
|
self.vel = vec(-PLAYER_SPEED / 2, 0).rotate(-self.rot)
|
||
|
|
||
|
|
||
|
def update(self):
|
||
|
self.get_keys()
|
||
|
self.rot = (self.rot + self.rot_speed * self.game.dt) % 360
|
||
|
self.image = pg.transform.rotate(self.game.player_img, self.rot)
|
||
|
self.rect = self.image.get_rect()
|
||
|
self.rect.center = self.pos
|
||
|
self.pos += self.vel * self.game.dt
|
||
|
self.hit_rect.centerx = self.pos.x
|
||
|
utils.collide_with_walls(self, self.game.wallTiles, 'x')
|
||
|
self.hit_rect.centery = self.pos.y
|
||
|
utils.collide_with_walls(self, self.game.wallTiles, 'y')
|
||
|
self.rect.center = self.hit_rect.center
|