عن المشروع

World Engine هو محرك ألعاب متسلسل (onchain game engine) وGamechain SDK مبني على بنية التقسيم من Argus Labs. يوضح ملف README أن المشروع قيد التطوير ويُعاد كتابته من الصفر، لذا فإن المستودع الحالي هو في الأساس سقالة تطوير وليس محركًا مكتملًا. يعتمد إعداد التطوير على أداتي proto وmoon. بعد تثبيت proto، يؤدي تشغيل `proto install` من جذر المستودع إلى تثبيت إصدارات Go وmoon المحددة في ملف `.prototools`؛ ويجب أن تبقى روابط proto في PATH حتى يتمكن `go` و`moon` من استخدام تلك الإصدارات. تُنفَّذ المهام الشائعة عبر moon: - `moon tasks` يسرد مهام المشروع. - `moon run world-engine:build` يبني حزم Go. - `moon run world-engine:lint` يفحص الكود ويُثبّت أداة الفحص المحددة. - `moon run world-engine:lint-fix` يطبق إصلاحات الفحص. - `moon run world-engine:test` يشغل جميع اختبارات Go. - `moon run world-engine:test-ci` يكتب ملفي coverage.out وjunit.xml. - `TEST_SEED=123 moon run world-engine:test` يعيد تشغيل اختبار ببذرة محددة. أداة golangci-lint تُثبَّت في مجلد `bin/tools` (المستبعد من التتبع)، وتعمل gotestsum عبر `go tool`. الاختبارات الفاشلة تُسجّل بذرة لإعادة الإنتاج. تم تعطيل تخزين مهام moon المؤقت لضمان تشغيل الاختبارات العشوائية في كل مرة، بينما تبقى ذاكرة التخزين المؤقتة لترجمة واختبارات Go مفعّلة. العملاء المولّدون مشاريع منفصلة. `moon run proto-csharp:build` أو `proto-csharp:pack` يبني أو يحزم عميل C# ويتطلب .NET SDK؛ الإصدارات التصحيحية تستخدم `build-debug` و`pack-debug`. `moon run proto-ts:build` يتحقق من أنواع عميل TypeScript ويتطلب Node/npm بالإضافة إلى تشغيل `npm install` مسبقًا في مجلد `proto/gen/ts`. moon يحل محل ملفات Taskfiles السابقة. تستخدم أسماء المهام الشرطات، لذا يصبح `test:ci` هو `world-engine:test-ci`. مهمة إعادة البناء في C# (`rebuild`) تنظف قبل البناء، ومهمة `update` تعرض التبعيات القديمة دون تغييرها. أخطاء التنسيق والتحليل تُمرَّر إلى المُستدعي. يعمل CI على نفس مهام Go المستخدمة في التطوير المحلي. يحتفظ سير عمل Box2D بمصفوفة معمارية خاصة به وأهداف `determinism-*` صريحة. تختار سير العمل أهدافًا محددة بدلًا من `moon ci`، مما يُبقي فحوصات الحتمية المكلفة في مصفوفة مخصصة. يمكن اختيار العملاء المولّدين يدويًا على مُشغِّلات مزوّدة بـ SDKs الخاصة بها، ولا تعمل أبدًا عمليات التنظيف والتنسيق تلقائيًا.