/
i_918
/
Vault_Escape
Обзор
Документация
Войти
/
i_918
/
Vault_Escape
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/game_loop.py
72 строки
2 KB
Chepur Ilya
добавлена новая музыка
21 июн 2026, 20:10
21 июн 2026, 20:10
46b595f
Код
Авторство
О чём код?
import pygame from src.core.state_machine import StateMachine from src.core.event_bus import bus from src.core.events import Events from src.entities.base_entity import BaseEntity import settings from typing import Any class GameLoop: def __init__(self): pygame.init() try: pygame.mixer.init() except pygame.error as e: print(f"Warning: Аудио подсистема не доступна: {e}") self.screen = self._create_display() pygame.display.set_caption("Vault Escape: Путь к Свободе") self.clock = pygame.time.Clock() self.state_machine = StateMachine() self.is_running = True bus.subscribe(Events.GAME_QUIT, self._on_quit) bus.subscribe(Events.CHANGE_STATE, self._on_change_state) def _create_display(self) -> pygame.Surface: settings.apply_video_layout(fullscreen=settings.FULLSCREEN) flags = pygame.FULLSCREEN if settings.FULLSCREEN else 0 BaseEntity._sprite_cache.clear() return pygame.display.set_mode( (settings.SCREEN_WIDTH, settings.SCREEN_HEIGHT), flags, ) def add_state(self, name, state_instance): self.state_machine.add_state(name, state_instance) def start(self, initial_state_name): self.state_machine.switch_state(initial_state_name) while self.is_running: events = pygame.event.get() for event in events: if event.type == pygame.QUIT: bus.publish(Events.GAME_QUIT) if not self.is_running: break self.state_machine.handle_input(events) self.state_machine.update() self.screen.fill(settings.COLOR_BLACK) self.state_machine.render(self.screen) pygame.display.flip() self.clock.tick(settings.FPS) pygame.quit() def _on_quit(self, data): self.is_running = False def _on_change_state(self, data: Any = None) -> None: if isinstance(data, dict): state_name = data.get("state") if state_name is None: return state_payload = {k: v for k, v in data.items() if k != "state"} self.state_machine.switch_state( str(state_name), state_payload if state_payload else None ) else: self.state_machine.switch_state(data)