Modified hitbox behavior

This commit is contained in:
theo@manjaro 2021-12-07 22:15:02 +01:00
parent 01a97402dd
commit 870a931ee5
2 changed files with 48 additions and 28 deletions

View File

@ -51,16 +51,9 @@ class Ennemy(Movable):
if not self.player: if not self.player:
self.player = next(iter(self.game.gameloop.findname("Player")),None) self.player = next(iter(self.game.gameloop.findname("Player")),None)
else: else:
if self.canhit: if self.candie:
if self.rect.colliderect(self.player): for rect in self.player.hitrects:
# Knock it horizontally if self.rect.colliderect(rect):
if self.player.rect[0]>self.rect[0]:
hor = 1
else:
hor = -1
self.player.yeet(hor*6,self.player.gravityway*-3,dmg=self.damage)
if self.candie and self.player.canhit:
if self.rect.colliderect(self.player.hitrect):
# Die # Die
self.dead = True self.dead = True
self.deadtrigger() self.deadtrigger()
@ -77,6 +70,14 @@ class Ennemy(Movable):
if not self.player.fastfall: if not self.player.fastfall:
self.player.canfastfall = True self.player.canfastfall = True
self.player.upcombo() self.player.upcombo()
if self.canhit and not self.dead:
if self.rect.colliderect(self.player):
# Knock it horizontally
if self.player.rect[0]>self.rect[0]:
hor = 1
else:
hor = -1
self.player.yeet(hor*6,self.player.gravityway*-3,dmg=self.damage)
elif self.respawn: elif self.respawn:
if not self.onscreen: if not self.onscreen:
self.dead = False self.dead = False

View File

@ -49,9 +49,13 @@ class Player(Movable):
self.water = self.game.gameloop.findname("Water")[0] self.water = self.game.gameloop.findname("Water")[0]
self.hitrect = self.rect.copy() self.lowerhitrect = self.rect.copy()
self.hitrect[2] = round(self.hitrect[2]*1) self.lowerhitrect[2] = round(self.rect[2]*0.5)
self.hitrect[3] = round(self.hitrect[3]*0.7) self.lowerhitrect[3] = round(self.rect[3]*0.2)
self.upperhitrect = self.lowerhitrect.copy()
self.upperhitrect[3] = round(self.rect[3]*0.4)
self.upperhitrectwidth=round(self.rect[2])
self.hitrects = [self.lowerhitrect,self.upperhitrect]
self.canhit = False self.canhit = False
self.dustparticles = game.getSpriteDir("particles/dust/") self.dustparticles = game.getSpriteDir("particles/dust/")
@ -228,15 +232,23 @@ class Player(Movable):
for i in self.spikes: for i in self.spikes:
if i.collidepoint(self.rect.center): if i.collidepoint(self.rect.center):
self.die() self.die()
# Updated hitrect
self.hitrect[0] = self.rect.center[0]-self.hitrect[2]/2 # Update stomp hitrect
offset = 0 self.lowerhitrect[0] = self.rect.center[0]-self.lowerhitrect[2]/2
self.lowerhitrect[1] = self.rect.center[1]-self.lowerhitrect[3]/2+20*self.gravityway
# Update bonk hitrect
canhit = abs(self.verspd)>1.8
if self.verspd>0: if self.verspd>0:
offset = 1 offset = 1
elif self.verspd<0: else:
offset = -1 offset = -1
self.canhit = abs(self.verspd)>2 self.upperhitrect[0] = self.rect.center[0]-self.upperhitrect[2]/2
self.hitrect[1] = self.rect.center[1]-self.hitrect[3]/2+10*offset self.upperhitrect[1] = self.rect.center[1]-self.upperhitrect[3]/2+10*offset
if canhit:
self.upperhitrect[2] = self.upperhitrectwidth
else:
self.upperhitrect[2] = 0
# Reducing the knockback # Reducing the knockback
if self.horkb>0: if self.horkb>0:
@ -319,6 +331,8 @@ class Player(Movable):
self.deadsfx.play() self.deadsfx.play()
self.depth = 5 self.depth = 5
self.rect[2],self.rect[3] = 0,0 self.rect[2],self.rect[3] = 0,0
for rect in self.hitrects:
rect[2] = 0
self.dead = True self.dead = True
t = Transition(self.game,time=1,holdtime=0.5,level="Level "+str(self.game.globals["levelname"]+1)) t = Transition(self.game,time=1,holdtime=0.5,level="Level "+str(self.game.globals["levelname"]+1))
@ -336,6 +350,11 @@ class Player(Movable):
flipy = self.fastfall<0 flipy = self.fastfall<0
sprite = self.game.pygame.transform.flip(self.sprite,self.flipx,flipy) sprite = self.game.pygame.transform.flip(self.sprite,self.flipx,flipy)
self.game.window.blit(sprite,[self.rect[0]-self.game.globals["camerax"]-self.spriteoffset,self.rect[1]-self.game.globals["cameray"]]) self.game.window.blit(sprite,[self.rect[0]-self.game.globals["camerax"]-self.spriteoffset,self.rect[1]-self.game.globals["cameray"]])
# Hitrects
if self.game.globals["allunlocked"]:
for rect in self.hitrects:
self.game.pygame.draw.rect(self.game.window,[255,0,0],[rect[0]-self.game.globals["camerax"],rect[1]-self.game.globals["cameray"],rect[2],rect[3]])
else: else:
if self.deathtimer.getloops()%2==0: if self.deathtimer.getloops()%2==0:
self.game.window.blit(self.retrytext,[self.game.globals["cameraw"]/2-self.retrytext.get_width()/2,self.game.globals["camerah"]/2-self.retrytext.get_height()/2]) self.game.window.blit(self.retrytext,[self.game.globals["cameraw"]/2-self.retrytext.get_width()/2,self.game.globals["camerah"]/2-self.retrytext.get_height()/2])