/
Vibek
/
First_Game
Обзор
Документация
Войти
/
Vibek
/
First_Game
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
models/abilities/base_ability.py
41 строка
2 KB
Vibek
Реализован бросок меча
14 июн 2026, 18:05
14 июн 2026, 18:05
57bbcc4
Код
Авторство
О чём код?
from abc import ABC, abstractmethod from typing import TYPE_CHECKING # TYPE_CHECKING предотвращает циклические импорты на этапе проверки типов (IDE не будет ругаться) if TYPE_CHECKING: from models.player import Player from core.events import EventBus class BaseAbility(ABC): """ Базовый контракт для всех активных способностей (Паттерн Strategy). """ def __init__(self, name: str, cost: float, cooldown: float): self.name = name self.cost = cost self.cooldown = cooldown # Максимальное время перезарядки (сек) self.current_cooldown = 0.0 # Текущий таймер перезарядки self.is_unlocked = False # Купил ли игрок эту способность def update(self, dt: float) -> None: """Отсчитывает кулдаун каждый кадр.""" if self.current_cooldown > 0.0: self.current_cooldown -= dt def can_activate(self, player: 'Player') -> bool: """Проверяет, можно ли использовать способность прямо сейчас.""" if not self.is_unlocked: return False if self.current_cooldown > 0.0: return False if player.force < self.cost: return False return True @abstractmethod def activate(self, player: 'Player', bus: 'EventBus') -> bool: """ Выполняет логику способности. :return: True, если способность успешно активирована, иначе False. """ pass