61 lines
2.1 KiB
Python
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 |