Projectdd/combat_system.py

61 lines
2.1 KiB
Python

# combat_system.py
import random
from settings import *
from items import get_item, ITEMS, WEAPON_STATS
class CombatSystem:
def __init__(self, weapon_manager):
self.weapon_manager = weapon_manager
def player_attack(self, player, enemies):
"""
Handles player attack on enemies using the currently equipped weapon.
"""
# Get weapon ID from weapon manager
weapon_id = self.weapon_manager.get_current_weapon()
if weapon_id is None:
print("DEBUG: No weapon equipped")
return
# Get weapon stats
damage = WEAPON_STATS.get(weapon_id, {}).get("damage", 1)
attack_range = WEAPON_STATS.get(weapon_id, {}).get("range", 50)
player_pos = player.pos
# Attack enemies within range
for enemy in enemies:
if not getattr(enemy, "alive", True):
continue # Skip dead enemies
enemy_pos = enemy.pos
distance = (enemy_pos - player_pos).length()
if distance <= attack_range:
enemy.health -= damage
print(f"DEBUG: {enemy.name if hasattr(enemy,'name') else 'Enemy'} took {damage} damage! (HP left: {enemy.health})")
if enemy.health <= 0:
enemy.alive = False
print(f"DEBUG: {enemy.name if hasattr(enemy,'name') else 'Enemy'} has been defeated!")
def enemy_attack(self, enemy, player):
"""
Handles enemy attack on player.
"""
if not getattr(enemy, "alive", True):
return
# Ensure enemy has attack properties
attack_range = getattr(enemy, "attack_range", 50)
attack_damage = getattr(enemy, "attack_damage", ENEMY_ATTACK_DAMAGE)
distance = (enemy.pos - player.pos).length()
if distance <= attack_range:
player.health -= attack_damage
print(f"DEBUG: Player took {attack_damage} damage! (HP left: {player.health})")
def update(self, dt):
"""
Updates combat-related state per frame.
Currently placeholder for cooldowns or status effects.
"""
pass