/
Vibek
/
First_Game
Обзор
Документация
Войти
/
Vibek
/
First_Game
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
controllers/input_handler.py
69 строк
3 KB
Vibek
все перменные перенесены в конфиг, отрисовка динамическая
21 июн 2026, 20:32
21 июн 2026, 20:32
f32a834
Код
Авторство
О чём код?
import pygame from pygame.math import Vector2 from core.display_manager import DisplayManager class InputHandler: """ Контроллер ввода. Отвечает за преобразование состояния клавиш в вектор направления. """ def __init__(self) -> None: pass def get_movement_vector(self) -> Vector2: """ Считывает текущее состояние клавиш WASD/Стрелки и возвращает нормализованный вектор. :return: Vector2 длиной 1.0 (или 0.0, если клавиши не нажаты) """ keys = pygame.key.get_pressed() x = keys[pygame.K_d] - keys[pygame.K_a] y = keys[pygame.K_s] - keys[pygame.K_w] direction = Vector2(x, y) if direction.length_squared() > 0: return direction.normalize() return direction def get_aim_vector(self, player_pos: Vector2, display: DisplayManager) -> Vector2: """ Считывает позицию мыши и рассчитывает направление взгляда. :param player_pos: Текущий центр игрока (hitbox_center / center) :param display: DisplayManager для преобразования window → design coords :return: Нормализованный Vector2 направления взгляда. """ mouse_pos = display.window_to_design(pygame.mouse.get_pos()) direction = mouse_pos - player_pos if direction.length_squared() > 0: return direction.normalize() return Vector2(1, 0) def is_attacking(self) -> bool: """Проверяет, нажата ли левая кнопка мыши.""" return pygame.mouse.get_pressed()[0] def is_blocking(self) -> bool: """Возвращает состояние ПКМ.""" return pygame.mouse.get_pressed()[2] def is_dash_pressed(self, events: list[pygame.event.Event]) -> bool: """Проверяет, нажал ли игрок клавишу активации рывка.""" for event in events: if event.type == pygame.KEYDOWN: if event.key == pygame.K_LSHIFT: return True return False def is_throw_pressed(self, events: list[pygame.event.Event]) -> bool: """Проверяет нажатие клавиши броска""" for event in events: if event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE: return True return False