Overflown/gamedata/objects/combat/player.py

104 lines
3.0 KiB
Python
Raw Normal View History

2021-06-25 16:13:52 +02:00
from gamedata.objects.base import BaseObject
class Player(BaseObject):
def __init__(self,x,y,game):
self.sprite = game.sprite_lib["icon.png"]
super().__init__(x,y,game,self.sprite.get_width(),self.sprite.get_height())
tileset = game.gameloop.findname("TilesetRenderer")[0]
self.collisionrects = tileset.rects
self.tilew = tileset.solidtilew
self.tileh = tileset.solidtileh
2021-06-25 18:57:40 +02:00
self.speed = 300
2021-07-01 13:54:56 +02:00
self.gravity = 1500
self.maxgravity = 800
self.jump = -600
self.vertical = self.maxgravity
self.hrest = 0
self.vrest = 0
2021-06-25 18:57:40 +02:00
2021-06-25 16:13:52 +02:00
def step(self):
keys = self.game.inputs["keys"]
hor=keys["right"]["pressed"]-keys["left"]["pressed"]
2021-06-25 18:57:40 +02:00
2021-07-01 13:54:56 +02:00
# Si je suis sur le sol
2021-06-25 18:57:40 +02:00
self.onground = False
2021-07-01 13:54:56 +02:00
if self.checkcollisions(0,1):
self.onground = True
self.vertical=0
2021-06-25 18:57:40 +02:00
else:
2021-07-01 13:54:56 +02:00
self.vertical+=self.gravity*self.game.dt
self.vertical = min(self.maxgravity,self.vertical)
2021-07-01 21:49:03 +02:00
if self.checkcollisions(0,-1):
self.vertical = max(0,self.vertical) # Se cogne au plafond
2021-06-25 19:05:43 +02:00
2021-07-01 13:54:56 +02:00
self.jumped = False
if self.onground:
if 0<keys["up"]["timer"]<=3:
self.vertical = self.jump
self.jumped = True
2021-06-25 18:57:40 +02:00
2021-06-25 19:05:43 +02:00
self.move(hor*self.speed*self.game.dt,self.vertical*self.game.dt)
2021-07-01 13:54:56 +02:00
def move(self,movex,movey):
hstoped = False
2021-07-01 13:54:56 +02:00
hor = int(movex+self.hrest)
self.hrest = movex+self.hrest-hor
while abs(hor)>0:
2021-07-01 13:54:56 +02:00
if hor>=self.tilew:
diffx = self.tilew
elif hor<=-self.tilew:
diffx = -self.tilew
else:
diffx = hor
2021-07-01 13:54:56 +02:00
rect = self.checkcollisions(diffx,0)
if rect:
hor = 0
self.hrest = 0
hstopped = True
if diffx>0:
self.rect.right = rect.left
else:
self.rect.left = rect.right
else:
hor-=diffx
self.rect[0]+=diffx
vstoped = False
2021-07-01 13:54:56 +02:00
ver = int(movey+self.vrest)
self.vrest = movey+self.vrest-ver
while abs(ver)>0:
if abs(ver)>self.tileh:
diffy = self.tileh*abs(ver)/ver
else:
diffy = ver
2021-07-01 13:54:56 +02:00
rect = self.checkcollisions(0,diffy)
if rect:
vstopped = True
ver = 0
self.vrest = 0
if diffy>0:
self.rect.bottom = rect.top
else:
self.rect.top = rect.bottom
else:
ver-=diffy
self.rect[1]+=diffy
2021-07-01 13:54:56 +02:00
def checkcollisions(self,offx,offy):
temprect = self.rect.copy()
temprect[0]+=offx
temprect[1]+=offy
result = False
for rect in self.collisionrects:
if temprect.colliderect(rect):
result = rect
break
return result