Ennemies respawn

This commit is contained in:
theo@manjaro 2021-11-17 15:30:46 +01:00
parent 1c25591197
commit d452a015da
2 changed files with 55 additions and 37 deletions

View File

@ -8,26 +8,40 @@ class Ennemy(Movable):
self.player = None self.player = None
self.respawnmargin = 30
self.respawn = True
self.dead = False
self.dustparticles = game.getSpriteDir("particles/dust/") self.dustparticles = game.getSpriteDir("particles/dust/")
def step(self): def step(self):
super().step() if not self.dead:
# Check for collision with player super().step()
if not self.player: # Check for collision with player
self.player = next(iter(self.game.gameloop.findname("Player")),None) if not self.player:
else: self.player = next(iter(self.game.gameloop.findname("Player")),None)
if self.player.canhit: else:
if self.rect.colliderect(self.player.hitrect): if self.player.canhit:
# Die if self.rect.colliderect(self.player.hitrect):
self.game.gameloop.delid(self.id) # Die
self.dead = True
# Add particles
self.game.addParticle(self.dustparticles,self.rect.center[0],self.rect.center[1])
# Boost the player vertically
if not self.player.fastfall:
if self.player.rect[1]>self.rect[1]:
direction = 1
else:
direction = -1
self.player.verspd = self.player.gravity/3*direction
elif self.respawn:
# Add particles if self.rect.center[0] < self.game.globals["camerax"]-self.respawnmargin:
self.game.addParticle(self.dustparticles,self.rect.center[0],self.rect.center[1]) self.dead = False # Respawn
# Boost the player vertically if self.rect.center[0] > self.game.globals["camerax"]+self.game.globals["cameraw"]+self.respawnmargin:
if not self.player.fastfall: self.dead = False # Respawn
if self.player.rect[1]>self.rect[1]:
direction = 1 else:
else: self.game.gameloop.delid(self.id)
direction = -1
self.player.verspd = self.player.gravity/3*direction

View File

@ -15,7 +15,7 @@ class Robot(Ennemy):
self.speed = 30 self.speed = 30
self.falling = 20 self.falling = 20
self.spriteindex = 0 self.spriteindex = 0
self.gravityway = 1 # Vertical flip self.gravityway = 1 # Vertical flip
self.walkingway = 1 # Horizontal flip self.walkingway = 1 # Horizontal flip
@ -31,30 +31,34 @@ class Robot(Ennemy):
def step(self): def step(self):
# Flipping vertically if not self.dead:
if self.water and self.rect.center[1]>self.water.rect[1]:
self.gravityway = -1
else:
self.gravityway = 1
# Flipping horizontally # Flipping vertically
if self.endpoints: if self.water and self.rect.center[1]>self.water.rect[1]:
if self.rect.center[0]>self.endpoints[1]: self.gravityway = -1
self.walkingway = -1 else:
if self.rect.center[0]<self.endpoints[0]: self.gravityway = 1
self.walkingway = 1
speedmult = [1,0.5,0][int(self.spriteindex)%3] # Flipping horizontally
if self.endpoints:
if self.rect.center[0]>self.endpoints[1]:
self.walkingway = -1
if self.rect.center[0]<self.endpoints[0]:
self.walkingway = 1
self.horspd = self.walkingway*self.speed*self.game.dt*speedmult speedmult = [1,0.5,0][int(self.spriteindex)%3]
self.verspd = self.gravityway*self.falling*self.game.dt
self.horspd = self.walkingway*self.speed*self.game.dt*speedmult
self.verspd = self.gravityway*self.falling*self.game.dt
self.spriteindex += self.speed*self.game.dt*0.15
super().step() # Actually move super().step() # Actually move
self.spriteindex += self.speed*self.game.dt*0.15
def draw(self): def draw(self):
self.sprite = self.sprites[int(self.spriteindex)%len(self.sprites)] if not self.dead:
drawnsprite = self.game.pygame.transform.flip(self.sprite,self.walkingway==-1,self.gravityway==-1) self.sprite = self.sprites[int(self.spriteindex)%len(self.sprites)]
self.game.window.blit(drawnsprite,[self.rect[0]-self.game.globals["camerax"],self.rect[1]-self.game.globals["cameray"]]) drawnsprite = self.game.pygame.transform.flip(self.sprite,self.walkingway==-1,self.gravityway==-1)
self.game.window.blit(drawnsprite,[self.rect[0]-self.game.globals["camerax"],self.rect[1]-self.game.globals["cameray"]])