43 lines
6.5 KiB
Markdown
43 lines
6.5 KiB
Markdown
# وضعیت پس از انتقال به React
|
|
|
|
این سند بر اسناد snapshot پیش از ریفکتور اولویت دارد. زبان JavaScript و رابط React 18 + Vite است؛ Ant Design و TypeScript اضافه نشدهاند. Tailwind CSS استایل رابط را تولید میکند. Three.js و نسخهٔ قبلی Vite ارتقا داده نشدهاند.
|
|
|
|
## معماری
|
|
|
|
- `src/main.jsx` و `routes/AppRoutes.jsx`: Provider و lazy/Suspense برای صفحهٔ بازی.
|
|
- `pages/game/`: briefing، HUD، نقشه، خرید/پرداخت، زیرنویس و نمایشگاه با JSX؛ بدون innerHTML و بدون ارسال مستقیم HTTP از کامپوننت.
|
|
- `components/shared/GameNode.jsx`: نمایش props و هماهنگی modal بومی؛ از store یا services وابستگی ندارد.
|
|
- `hooks/useGameEngine.js`: بارگذاری موتور و cleanup در unmount.
|
|
- `game/createGame.js`: راهاندازی مرتب زیرسیستمها از runtimeBindings؛ توقف مشترک با AbortSignal.
|
|
- `game/runtime/`: چرخهٔ عمر، ورودی/حرکت، خرید، نقشه، HUD، برخوردهای داستانی، GPS/AR و render loop جدا هستند. context فقط برای state زندهٔ شبیهسازی و اشیای غیرقابل سریالسازی است؛ داخل Redux renderer/Scene/Texture نمیگذاریم.
|
|
- `game/models/`: ساخت هندسهٔ کارخانه، خانواده، کارکنان، خودرو، دستگاه و نمونههای نمایشگاه. factory/city/family اکنون مراحل مستقل ساخت و helperهای نامدار دارند.
|
|
- `game/economy/`: gameState، payment و scoring با قرارداد اقتصادی قبلی.
|
|
- `constants/`: مکانها و showroomCatalog؛ `utils/`: geo و showroomAnswers؛ `types/`: JSDoc قراردادها.
|
|
- `services/apiClient.js`: تنها Axios instance، timeout و error normalization. worldService دادهٔ optional و tileها را میگیرد؛ imageryDownloadService اسکریپت آمادهسازی تصویر را پوشش میدهد.
|
|
|
|
## مرز Redux و موتور
|
|
|
|
slice `game` تصویر قابل سریالسازی پیشرفت اقتصادی را برای بخشهای مشترک رابط دارد. موتور تنها نویسندهٔ قواعد شبیهسازی است؛ رابط فرمان میفرستد و مستقلاً پول/XP تغییر نمیدهد. `interface` snapshot نمایش را نگه میدارد. bridge وضعیت pause را همزمان برای موتور در دسترس میگذارد و انتشار React را به ده بار در ثانیه محدود میکند؛ WebGL مستقل render میکند. callbackها در registry محلی bridgeاند و در Redux قرار ندارند. وضعیت موقت preview تصویر داخل کامپوننت است.
|
|
|
|
## استایل
|
|
|
|
`styles/game.css` ورودی Tailwind است. `styles/gameTheme.js` لایهٔ پایه و tokenهای ظاهر قبلی را برای جلوگیری از تغییر ناخواستهٔ UI نگه میدارد و از plugin تنظیمات Tailwind تولید میشود. کامپوننتهای جدید نمایشگاه از utilityهای Tailwind استفاده میکنند. inline style تنها برای مختصات پویا/پیشرفت به کار میرود. ادامهٔ طراحی نباید لایهٔ CSS مستقل موازی بسازد.
|
|
|
|
## نمایشگاه
|
|
|
|
سه مدل rm-35/rm-48/rm-60 در حیاط، نزدیک نقطهٔ شروع و خودرو هستند. نمایش سهبعدی نمونهها بهترتیب ۳۵، ۴۸ و ۶۰ slot دارد. با نزدیکشدن، نشان تعامل Q ظاهر میشود؛ در محوطه، دکمهٔ «مدلهای کارخانه» نیز کاتالوگ را باز میکند. روبات قیمت و امکانات را از یک کاتالوگ مشترک پاسخ میدهد.
|
|
|
|
قیمتها به ریالاند: ۴٬۶۸۰٬۰۰۰٬۰۰۰؛ ۵٬۴۸۰٬۰۰۰٬۰۰۰؛ ۵٬۹۸۰٬۰۰۰٬۰۰۰. اینها قیمت دستگاه کاملاند و به اقتصاد خوراکی/هتومان، XP، موجودی و مأموریت وصل نیستند. پاسخها محلی و تعیینشدهاند؛ backend یا مدل زبانی بیرونی ندارند.
|
|
|
|
مسیر فایلهای `images/machine-*-base.webp`، `images/machine-*-white.webp` و `gifs/machine-*.gif` ثبت شده، اما فایل اصلی هنوز تحویل نشده است. UI نبود تصویر را بهوضوح نشان میدهد و مدل سهبعدی مستقل وجود دارد. مسیرهای ریشهای کاتالوگ هنگام نمایش نسبت به پوشهٔ انتشار حل میشوند تا GitHub Pages هم کار کند.
|
|
|
|
## آزمون و انتشار
|
|
|
|
`npm test` شامل تست Node قبلی و Vitest/React Testing Library است. CIهای GitHub/Gitea و Dockerfile نیز همین فرمان را اجرا میکنند. `npm run lint`، `npm run format:check` و `npm run build` بررسیهای دیگرند. نسخهٔ Vitest تازه انتخاب شده فاقد هشدارهای audit مرحلهٔ نصب است؛ نسخههای قبلی بازی ارتقا نیافتند.
|
|
|
|
Service Worker همچنان در Vite تولید میشود. با تأیید کاربر، `fetch` بومی داخل آن استثنای قاعدهٔ Axios است؛ interception و cache آفلاین آن حفظ شدهاند. assetهای جدید build در precache میآیند؛ tileهای ماهوارهای فقط پس از مشاهده cache میشوند. صف ارسال آنلاین جدید اضافه نشده است.
|
|
|
|
## محدودیت بررسی
|
|
|
|
اجرای مرورگر محلی برای briefing، شروع، HUD، نقشه و پرسیدن قیمت نمایشگاه انجام شده است. تست حسگر واقعی، GPS میدانی، camera permission روی گوشی و انتشار روی سرور در این ریفکتور انجام نشدهاند. یافتههای رفتاری قدیمی docs/08 الزاماً اصلاح نشدهاند؛ آنها تسکهای جدا هستند. بلوک داده/هندسه و بعضی الگوریتمهای قدیمی هنوز میتوانند طولانیتر از هدف تقریبی ۳۰ خط باشند؛ ادعای انطباق صددرصد تمام توابع و nesting وجود ندارد. برای تغییر بعدی هر ماژول، قواعد AGENTS روی کد تازه الزامی است.
|