2021-07-08 16:20:22 +02:00
|
|
|
from gamedata.objects.combat.movable import Movable
|
2021-06-25 16:13:52 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
class Player(Movable):
|
2021-06-25 16:13:52 +02:00
|
|
|
|
2021-07-03 00:26:02 +02:00
|
|
|
def __init__(self,game):
|
2021-06-25 18:29:57 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
super().__init__(game,0,0)
|
|
|
|
spawnpoint = game.lib.choice(self.tileset.spawns)
|
|
|
|
self.rect.move_ip(spawnpoint.center)
|
|
|
|
|
2021-06-25 18:29:57 +02:00
|
|
|
self.sprite = game.sprite_lib["icon.png"]
|
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
self.speed = 200
|
2021-07-03 00:26:02 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
self.fastfallmargin = 2
|
2021-07-03 00:26:02 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
self.hitpose = False
|
|
|
|
self.hitposeduration = 0.5
|
|
|
|
self.hitposetimer = game.lib.Timer(self.hitposeduration)
|
2021-06-25 18:29:57 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
self.stepsize = 20
|
2021-06-25 18:29:57 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
self.gravity = 15
|
|
|
|
self.maxgravity = 80
|
|
|
|
self.jump = -5
|
|
|
|
self.verspd = self.maxgravity
|
2021-06-25 18:57:40 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
def step(self):
|
2021-07-02 16:25:40 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
if not self.hitpose:
|
|
|
|
keys = self.game.inputs["keys"]
|
|
|
|
self.horspd=(keys["right"]["pressed"]-keys["left"]["pressed"])*self.game.dt*self.speed
|
2021-07-01 13:54:56 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
# Si je suis sur le sol
|
|
|
|
self.onground = False
|
|
|
|
if self.checkcollisions(0,1):
|
|
|
|
self.onground = True
|
|
|
|
self.verspd=min(0,self.verspd)
|
|
|
|
else:
|
|
|
|
self.verspd+=self.gravity*self.game.dt
|
|
|
|
self.verspd= min(self.maxgravity,self.verspd)
|
|
|
|
if self.checkcollisions(0,-1):
|
|
|
|
self.verspd= max(0,self.verspd) # Se cogne au plafond BONK
|
|
|
|
|
|
|
|
self.jumped = False
|
|
|
|
if self.onground:
|
|
|
|
if 0<keys["up"]["timer"]<=3:
|
|
|
|
self.verspd= self.jump
|
|
|
|
self.jumped = True
|
|
|
|
if self.verspd==0:
|
|
|
|
self.move(0,-self.stepsize)
|
|
|
|
super().step()
|
|
|
|
self.move(0,self.stepsize)
|
|
|
|
else:
|
|
|
|
super().step()
|
2021-06-25 18:57:40 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
# Je passe en dessous des semi-plateformes
|
|
|
|
if keys["down"]["timer"]==1:
|
2021-07-09 10:04:17 +02:00
|
|
|
falled = False
|
2021-07-08 16:20:22 +02:00
|
|
|
if not self.checkcollisions(0,1,semi=False):
|
|
|
|
semi = self.checkcollisions(0,1,classic=False)
|
|
|
|
if semi!=self.checkcollisions(0,0,classic=False) and semi:
|
|
|
|
self.rect.bottom = semi.top+1
|
2021-07-09 10:04:17 +02:00
|
|
|
falled = True
|
|
|
|
if not falled:
|
|
|
|
if 0<self.verspd <= self.fastfallmargin or (abs(self.verspd)<abs(self.currentspdv) and abs(self.verspd)<=self.fastfallmargin/1.8):
|
|
|
|
self.verspd = self.maxgravity/4
|
2021-07-07 16:53:58 +02:00
|
|
|
|
2021-07-08 16:20:22 +02:00
|
|
|
else:
|
|
|
|
if self.hitposetimer.tick(self.game.dt):
|
|
|
|
self.hitpose = False
|
2021-07-01 13:54:56 +02:00
|
|
|
|
2021-07-02 21:06:34 +02:00
|
|
|
self.game.globals["camerax"] = self.rect.center[0]-self.game.globals["cameraw"]/2
|
|
|
|
self.game.globals["cameray"] = self.rect.center[1]-self.game.globals["camerah"]/2
|
|
|
|
|
|
|
|
def draw(self):
|
|
|
|
self.game.window.blit(self.sprite,[self.rect[0]-self.game.globals["camerax"],self.rect[1]-self.game.globals["cameray"]])
|