zoria/src/player.py

65 lines
1.7 KiB
Python
Raw Normal View History

2020-02-12 13:40:25 -08:00
import pygame
import math
2020-02-24 18:20:51 -08:00
from . import controller
from .vector import *
from .sprite import Sprite
2020-02-12 11:26:41 -08:00
class Player:
pos = Vector(0, 0)
2020-02-12 11:26:41 -08:00
hp = 100
mp = 50
xp = 0
dir = 0
vel = Vector(0, 0)
2020-02-20 21:36:17 -08:00
# TODO: Fix diagonal speed
2020-03-04 12:32:22 -08:00
speed = 3 # meters per second
2020-02-20 21:36:17 -08:00
def __init__(self):
self.sprite = Sprite()
2020-02-19 11:26:07 -08:00
def set_pos(self, vec_or_x, y = None):
self.pos = vec_or_num(vec_or_x, y)
2020-02-12 13:40:25 -08:00
def update(self, dtime, map):
self.vel = Vector(0, 0)
2020-02-19 10:21:30 -08:00
if controller.is_down("left"):
self.dir = 3
self.vel.x -= 1
2020-02-20 18:59:04 -08:00
if controller.is_down("right"):
self.dir = 1
self.vel.x += 1
2020-02-20 18:59:04 -08:00
if controller.is_down("up"):
self.dir = 2
self.vel.y -= 1
2020-02-20 18:59:04 -08:00
if controller.is_down("down"):
self.dir = 0
self.vel.y += 1
2020-02-20 18:59:04 -08:00
if self.vel.x != 0 and self.vel.y != 0:
self.vel = self.vel * math.sqrt(0.5)
2020-02-20 18:59:04 -08:00
oldx = self.pos.x
self.set_pos(self.pos.x + self.vel.x * self.speed * dtime, self.pos.y)
if map.collides(self.pos, self.sprite.rect):
self.set_pos(oldx, self.pos.y)
oldy = self.pos.y
self.set_pos(self.pos.x, self.pos.y + self.vel.y * self.speed * dtime)
if map.collides(self.pos, self.sprite.rect):
self.set_pos(self.pos.x, oldy)
if controller.is_down("up") or controller.is_down("down") or \
controller.is_down("left") or controller.is_down("right"):
self.sprite.texture.set_animation(self.dir * 4, (self.dir * 4) + 3, self.speed * 2)
else:
self.sprite.texture.set_animation(self.dir * 4, self.dir * 4, 0)