Об этом проекте

phase.rs — это некоммерческий фанатский проект, реализующий движок правил Magic: The Gathering и игровой клиент. Движок написан на Rust и компилируется как в нативный код, так и в WebAssembly, обеспечивая работу настольного приложения Tauri, браузерного PWA и многопользовательского сервера на основе WebSocket. Фронтенд использует React, TypeScript, Tailwind v4, Zustand, Framer Motion и Vite. Основные возможности, описанные в README: - Движок правил, охватывающий ходы, приоритет, стек, бой, действия, основанные на состоянии, слои, триггеры и эффекты замены. - Данные карт, разбираемые из MTGJSON, с поддержкой форматов, таких как Commander, Modern, Pioneer, Standard, Legacy, Vintage и Pauper. - ИИ-оппонент, использующий логику решений по каждой карте, поиск по дереву игры и эвристики оценки. - Игровой интерфейс с полем боя, рукой, стеком, оверлеями выбора цели, оплатой маны, анимациями и фоновым звуком. - Мультиплеер через сервер Axum WebSocket со скрытой информацией, системой лобби и одноранговой связью WebRTC через PeerJS. - Ленты метаигры, собираемые с MTGGoldfish и обновляемые ежедневно. - Конструктор колод с поиском карт, визуальной сборкой и импортом .dck/.dec. - Кроссплатформенные цели: настольное приложение Tauri (Windows, macOS, Linux), браузерный PWA, планшет и APK для Android. - Изображения карт из Scryfall с кэшированием в IndexedDB. Рабочее пространство Rust разделено на крейты: engine (типы, игровая логика, парсер, база данных карт), phase-ai (оценка, допустимые действия, поиск), engine-wasm (привязки wasm-bindgen + tsify), server-core (управление сессиями), phase-server (сервер Axum WebSocket) и feed-scraper (автономный сборщик метаигры). Фронтенд использует независимый от транспорта интерфейс EngineAdapter с реализациями WASM, Tauri IPC, WebSocket и WebRTC host/guest. Принципы проектирования включают чистые редьюсеры, размеченные объединения, сериализуемые через serde и tsify, и неизменяемое состояние со структурным разделением через rpds. Для настройки требуются инструментальная цепочка Rust, цель wasm32, wasm-bindgen-cli, опционально wasm-opt, Node.js 22+ и pnpm. Скрипт настройки получает данные, собирает WASM и устанавливает зависимости. Выделенный многопользовательский сервер доступен как образ Docker, предоставляющий конечные точки проверки работоспособности и WebSocket, с переменными окружения для порта, каталога данных, источника CORS, режима только лобби, JSON-логирования, каталога журналов и административного bearer-токена. Для Kubernetes предоставлен Helm-чарт. Звук на Linux-десктопе зависит от плагинов GStreamer; обсуждаются упаковка AppImage, .deb и Flatpak, при этом Flatpak предназначен для покрытия пробелов в распространении и поведения NVIDIA при простое ЦП. Сборки для Android требуют определённых SDK, NDK и целей Rust, а релизные APK подписываются настроенными секретами. Проект имеет двойную лицензию MIT или Apache 2.0. Утверждается, что он не включает ресурсы Wizards, получая изображения карт и символы маны из Scryfall во время выполнения, и не связан с Wizards of the Coast. README также описывает рабочий процесс внесения вклада в реализацию карт путём передачи подсказки агенту LLM.