feat: tower sound effects
- integrate sound_manager into Tower class - add sfx for buy success/fail, tower shoot, and monster hit
This commit is contained in:
+10
-25
@@ -1,5 +1,3 @@
|
||||
from turtledemo.lindenmayer import draw
|
||||
|
||||
import pygame
|
||||
import random
|
||||
import math
|
||||
@@ -13,7 +11,9 @@ respawn_delay = 10000 # ms bis neues Feld spawnt
|
||||
|
||||
|
||||
class Tower:
|
||||
def __init__(self) -> None:
|
||||
def __init__(self, sound_manager) -> None:
|
||||
self.sound_manager = sound_manager
|
||||
|
||||
# Feld und Tower -> None wenn nicht aktiv
|
||||
# Position interagierbares Feld
|
||||
self.field_rect: pygame.Rect = None
|
||||
@@ -24,7 +24,7 @@ class Tower:
|
||||
# Zeitpunkt, wann der Tower gebaut wurde
|
||||
self.tower_start: int = None
|
||||
# Zeitpunkt, wann Tower despawnt ist
|
||||
self.despawn_timer: int = None
|
||||
self.despawn_time: int = None
|
||||
# Zeitpunkt des letzten Schusses
|
||||
self.last_shot: int = 0
|
||||
|
||||
@@ -65,9 +65,11 @@ class Tower:
|
||||
return False
|
||||
# prüft alle Bedingungen gleichzeitig
|
||||
if not (self.field_rect.colliderect(player_rect) and keys[pygame.K_e] and ects.balance >= TOWER_COST):
|
||||
self.sound_manager.play_sfx("buy_fail")
|
||||
return False
|
||||
|
||||
# ECTS abziehen und Tower bauen
|
||||
self.sound_manager.play_sfx("buy_success")
|
||||
ects.balance -= TOWER_COST
|
||||
self.tower_rect = self.field_rect
|
||||
self.field_rect = None
|
||||
@@ -100,6 +102,7 @@ class Tower:
|
||||
"vel_y": (dy / distance) * PROJECTILE_SPEED,
|
||||
})
|
||||
|
||||
self.sound_manager.play_sfx("tower_shoot")
|
||||
self.last_shot = now
|
||||
|
||||
# Bewegung der Projektile und Kollision mit Monster prüfen
|
||||
@@ -110,6 +113,7 @@ class Tower:
|
||||
# Projektil trifft auf Monster -> Schaden wird addiert und Projektil entfernt
|
||||
if monster_rect and pygame.Rect(int(p["x"]), int(p["y"]), projectile_size, projectile_size).colliderect(monster_rect):
|
||||
total_damage += PROJECTILE_DMG
|
||||
self.sound_manager.play_sfx("monster_hit")
|
||||
self.projectiles.remove(p)
|
||||
|
||||
# wenn der Tower abgelaufen ist, soll er despawnen und ein Timer starten
|
||||
@@ -165,8 +169,7 @@ class Tower:
|
||||
else:
|
||||
# Fallback - gelbes Rechteck
|
||||
pygame.draw.rect(surface, COLOR_PROJECTILE,
|
||||
pygame.Rect(int(p["x"]) - cam_x, int(p["y"]) - cam_y, projectile_size, projectile_size))
|
||||
|
||||
pygame.Rect(draw_x, draw_y, projectile_size, projectile_size))
|
||||
|
||||
|
||||
|
||||
@@ -175,22 +178,4 @@ class Tower:
|
||||
self.field_rect = None
|
||||
self.tower_rect = None
|
||||
self.projectiles = []
|
||||
self.despawn_timer = None
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
self.despawn_time = None
|
||||
Reference in New Issue
Block a user