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 pygame
|
||||||
import random
|
import random
|
||||||
import math
|
import math
|
||||||
@@ -13,7 +11,9 @@ respawn_delay = 10000 # ms bis neues Feld spawnt
|
|||||||
|
|
||||||
|
|
||||||
class Tower:
|
class Tower:
|
||||||
def __init__(self) -> None:
|
def __init__(self, sound_manager) -> None:
|
||||||
|
self.sound_manager = sound_manager
|
||||||
|
|
||||||
# Feld und Tower -> None wenn nicht aktiv
|
# Feld und Tower -> None wenn nicht aktiv
|
||||||
# Position interagierbares Feld
|
# Position interagierbares Feld
|
||||||
self.field_rect: pygame.Rect = None
|
self.field_rect: pygame.Rect = None
|
||||||
@@ -24,7 +24,7 @@ class Tower:
|
|||||||
# Zeitpunkt, wann der Tower gebaut wurde
|
# Zeitpunkt, wann der Tower gebaut wurde
|
||||||
self.tower_start: int = None
|
self.tower_start: int = None
|
||||||
# Zeitpunkt, wann Tower despawnt ist
|
# Zeitpunkt, wann Tower despawnt ist
|
||||||
self.despawn_timer: int = None
|
self.despawn_time: int = None
|
||||||
# Zeitpunkt des letzten Schusses
|
# Zeitpunkt des letzten Schusses
|
||||||
self.last_shot: int = 0
|
self.last_shot: int = 0
|
||||||
|
|
||||||
@@ -65,9 +65,11 @@ class Tower:
|
|||||||
return False
|
return False
|
||||||
# prüft alle Bedingungen gleichzeitig
|
# prüft alle Bedingungen gleichzeitig
|
||||||
if not (self.field_rect.colliderect(player_rect) and keys[pygame.K_e] and ects.balance >= TOWER_COST):
|
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
|
return False
|
||||||
|
|
||||||
# ECTS abziehen und Tower bauen
|
# ECTS abziehen und Tower bauen
|
||||||
|
self.sound_manager.play_sfx("buy_success")
|
||||||
ects.balance -= TOWER_COST
|
ects.balance -= TOWER_COST
|
||||||
self.tower_rect = self.field_rect
|
self.tower_rect = self.field_rect
|
||||||
self.field_rect = None
|
self.field_rect = None
|
||||||
@@ -100,6 +102,7 @@ class Tower:
|
|||||||
"vel_y": (dy / distance) * PROJECTILE_SPEED,
|
"vel_y": (dy / distance) * PROJECTILE_SPEED,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
self.sound_manager.play_sfx("tower_shoot")
|
||||||
self.last_shot = now
|
self.last_shot = now
|
||||||
|
|
||||||
# Bewegung der Projektile und Kollision mit Monster prüfen
|
# 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
|
# 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):
|
if monster_rect and pygame.Rect(int(p["x"]), int(p["y"]), projectile_size, projectile_size).colliderect(monster_rect):
|
||||||
total_damage += PROJECTILE_DMG
|
total_damage += PROJECTILE_DMG
|
||||||
|
self.sound_manager.play_sfx("monster_hit")
|
||||||
self.projectiles.remove(p)
|
self.projectiles.remove(p)
|
||||||
|
|
||||||
# wenn der Tower abgelaufen ist, soll er despawnen und ein Timer starten
|
# wenn der Tower abgelaufen ist, soll er despawnen und ein Timer starten
|
||||||
@@ -165,8 +169,7 @@ class Tower:
|
|||||||
else:
|
else:
|
||||||
# Fallback - gelbes Rechteck
|
# Fallback - gelbes Rechteck
|
||||||
pygame.draw.rect(surface, COLOR_PROJECTILE,
|
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.field_rect = None
|
||||||
self.tower_rect = None
|
self.tower_rect = None
|
||||||
self.projectiles = []
|
self.projectiles = []
|
||||||
self.despawn_timer = None
|
self.despawn_time = None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user