Add weapon_system.py
parent
4211b93111
commit
1fbbb94f20
|
|
@ -0,0 +1,100 @@
|
|||
import pygame
|
||||
from settings import *
|
||||
|
||||
|
||||
class Weapon:
|
||||
"""Base weapon class"""
|
||||
|
||||
def __init__(self, item_id, name, damage, cooldown, knockback, color):
|
||||
self.item_id = item_id
|
||||
self.name = name
|
||||
self.damage = damage
|
||||
self.cooldown = cooldown
|
||||
self.knockback = knockback
|
||||
self.color = color
|
||||
self.last_attack_time = 0
|
||||
|
||||
def can_attack(self, current_time):
|
||||
"""Check if enough time has passed for another attack"""
|
||||
return (current_time - self.last_attack_time) >= self.cooldown
|
||||
|
||||
def do_attack(self, current_time):
|
||||
"""Perform attack and update cooldown"""
|
||||
if self.can_attack(current_time):
|
||||
self.last_attack_time = current_time
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_cooldown_percent(self, current_time):
|
||||
"""Get cooldown progress (0.0 to 1.0)"""
|
||||
time_since_attack = current_time - self.last_attack_time
|
||||
if time_since_attack >= self.cooldown:
|
||||
return 1.0
|
||||
return time_since_attack / self.cooldown
|
||||
|
||||
|
||||
class WeaponManager:
|
||||
"""Manage player weapons and current selection"""
|
||||
|
||||
def __init__(self):
|
||||
self.weapons = {}
|
||||
self.current_weapon_id = None
|
||||
self.current_time = 0
|
||||
self.setup_default_weapons()
|
||||
|
||||
def setup_default_weapons(self):
|
||||
"""Create default weapons"""
|
||||
for weapon_id, stats in WEAPON_STATS.items():
|
||||
weapon = Weapon(
|
||||
weapon_id,
|
||||
stats["name"],
|
||||
stats["damage"],
|
||||
stats["cooldown"],
|
||||
stats["knockback"],
|
||||
stats["color"]
|
||||
)
|
||||
self.weapons[weapon_id] = weapon
|
||||
|
||||
# Set first weapon as current
|
||||
if self.weapons:
|
||||
self.current_weapon_id = list(self.weapons.keys())[0]
|
||||
|
||||
def get_current_weapon(self):
|
||||
"""Get the currently equipped weapon"""
|
||||
if self.current_weapon_id in self.weapons:
|
||||
return self.weapons[self.current_weapon_id]
|
||||
return None
|
||||
|
||||
def switch_weapon(self, weapon_id):
|
||||
"""Switch to a different weapon"""
|
||||
if weapon_id in self.weapons:
|
||||
self.current_weapon_id = weapon_id
|
||||
return True
|
||||
return False
|
||||
|
||||
def attack(self):
|
||||
"""Attempt attack with current weapon"""
|
||||
weapon = self.get_current_weapon()
|
||||
if weapon and weapon.do_attack(self.current_time):
|
||||
return weapon.damage, weapon.knockback
|
||||
return 0, 0
|
||||
|
||||
def update(self, dt):
|
||||
"""Update weapon manager"""
|
||||
self.current_time += dt
|
||||
|
||||
def add_weapon(self, weapon_id):
|
||||
"""Add weapon to collection (for inventory)"""
|
||||
if weapon_id in WEAPON_STATS and weapon_id not in self.weapons:
|
||||
stats = WEAPON_STATS[weapon_id]
|
||||
weapon = Weapon(
|
||||
weapon_id,
|
||||
stats["name"],
|
||||
stats["damage"],
|
||||
stats["cooldown"],
|
||||
stats["knockback"],
|
||||
stats["color"]
|
||||
)
|
||||
self.weapons[weapon_id] = weapon
|
||||
return True
|
||||
return False
|
||||
Loading…
Reference in New Issue