|
|
|
|
@ -22,6 +22,9 @@ class Player:
|
|
|
|
|
|
|
|
|
|
self.game_paused = False
|
|
|
|
|
|
|
|
|
|
self.broken_bones = 0
|
|
|
|
|
self.last_collision_obstacle = None
|
|
|
|
|
|
|
|
|
|
def update(self, ground_y=80, obstacles=[], items=[], score=0, input_allowed=False):
|
|
|
|
|
keys = pygame.key.get_pressed()
|
|
|
|
|
joysticks = [pygame.joystick.Joystick(x) for x in range(pygame.joystick.get_count())]
|
|
|
|
|
@ -58,17 +61,28 @@ class Player:
|
|
|
|
|
# HINDERNISSE-KOLLISION
|
|
|
|
|
for obs in obstacles:
|
|
|
|
|
if self.rect.colliderect(obs.get_rect()):
|
|
|
|
|
# Prüfen: Spieler kommt von oben und fällt drauf
|
|
|
|
|
if self.velocity_y > 0 and self.rect.bottom <= obs.get_rect().top + 10:
|
|
|
|
|
if self.velocity_y > 0 and self.rect.bottom - self.velocity_y < obs.get_rect().top:
|
|
|
|
|
# Fred landet oben auf der Kiste
|
|
|
|
|
self.rect.bottom = obs.get_rect().top
|
|
|
|
|
self.velocity_y = 0
|
|
|
|
|
self.on_ground = True
|
|
|
|
|
self.last_collision_obstacle = None
|
|
|
|
|
else:
|
|
|
|
|
# Seitliche Kollision
|
|
|
|
|
if self.rect.right > obs.get_rect().left and self.rect.left < obs.get_rect().left:
|
|
|
|
|
self.rect.right = obs.get_rect().left
|
|
|
|
|
elif self.rect.left < obs.get_rect().right and self.rect.right > obs.get_rect().right:
|
|
|
|
|
self.rect.left = obs.get_rect().right
|
|
|
|
|
# Seitenkollision - Fred wird blockiert UND Knochenbruch zählen
|
|
|
|
|
if abs(self.rect.right - obs.get_rect().left) < abs(settings.player.speed):
|
|
|
|
|
if self.last_collision_obstacle != obs:
|
|
|
|
|
self.broken_bones += 1
|
|
|
|
|
self.last_collision_obstacle = obs
|
|
|
|
|
self.rect.right = obs.get_rect().left # WICHTIG: stoppen!
|
|
|
|
|
elif abs(self.rect.left - obs.get_rect().right) < abs(settings.player.speed):
|
|
|
|
|
if self.last_collision_obstacle != obs:
|
|
|
|
|
self.broken_bones += 1
|
|
|
|
|
self.last_collision_obstacle = obs
|
|
|
|
|
self.rect.left = obs.get_rect().right # WICHTIG: stoppen!
|
|
|
|
|
else:
|
|
|
|
|
# Keine Kollision mehr → Reset
|
|
|
|
|
if self.last_collision_obstacle == obs:
|
|
|
|
|
self.last_collision_obstacle = None
|
|
|
|
|
|
|
|
|
|
# ITEM-KOLLISION
|
|
|
|
|
for item in items[:]:
|
|
|
|
|
|