Overflown/gamedata/objects/combat/player.py

112 lines
3.9 KiB
Python

from gamedata.objects.combat.movable import Movable
class Player(Movable):
def __init__(self,game):
super().__init__(game,0,0)
spawnpoint = game.lib.choice(self.tileset.spawns)
self.rect.move_ip(spawnpoint.center)
self.sprite = game.sprite_lib["icon.png"]
self.speed = 200
self.controlled = True
self.fastfallmargin = 2
self.playerid = 0
self.teamid = self.playerid
self.hitpose = False
self.hitposeduration = 0.01
self.hitposetimer = game.lib.Timer(self.hitposeduration)
self.damage = 0
self.horkb = 0
self.verkb = 0
self.reducekb = 50
self.multkb = 1
self.attackstate = None
self.stepsize = 20
self.gravity = 15
self.maxgravity = 80
self.jump = -5
self.verspd = self.maxgravity
def step(self):
if not self.hitpose:
if not self.game.globals["hitpose"]:
keys = self.game.inputs["keys"]
if self.controlled:
self.horspd=(keys["right"]["pressed"]-keys["left"]["pressed"])*self.game.dt*self.speed
if self.attackstate:
self.attackstate(self)
# Si je suis sur le sol
self.onground = False
self.onceilling = 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.onceilling = True
self.verspd= max(0,self.verspd) # Se cogne au plafond BONK
# Adding knockback
self.horspd+=self.horkb
self.verspd+=self.verkb
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()
# Reducing the knockback
if self.horkb>0:
self.horkb = max(0,self.horkb-self.reducekb)*self.game.dt
if self.horkb<0:
self.horkb = min(0,self.horkb+self.reducekb)*self.game.dt
if self.verkb>0:
self.verkb = max(0,self.verkb-self.reducekb)*self.game.dt
if self.verkb<0:
self.verkb = min(0,self.verkb+self.reducekb)*self.game.dt
# Je passe en dessous des semi-plateformes
if keys["down"]["timer"]==1:
falled = False
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
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
else: # If I'm in hitpose
if self.hitposetimer.tick(self.game.dt):
self.hitpose = False
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"]])