इस प्रोजेक्ट के बारे में

# helengine helengine एक साझा इंजन और एडिटर वर्कस्पेस है जो प्रोजेक्ट `.heproj` फ़ाइलों से प्लेटफ़ॉर्म पैकेज बनाता है। इसे आधुनिक एसेट पाइपलाइनों और टूलिंग का उपयोग करते हुए सीमित हार्डवेयर (जैसे, DS और PS2 जैसे रेट्रो कंसोल) को लक्षित करने के लिए डिज़ाइन किया गया है। ## एडिटर CLI प्लेटफ़ॉर्म बिल्ड प्लेटफ़ॉर्म बिल्ड एक PowerShell रैपर स्क्रिप्ट `scripts/build-platform.ps1` के माध्यम से व्यवस्थित किए जाते हैं, जो एडिटर CLI को पुनर्स्थापित और प्रकाशित करता है, फिर लेखक प्रोजेक्ट को सीधे बनाता है। उदाहरण उपयोग: ```powershell powershell -NoProfile -ExecutionPolicy Bypass -File C:\dev\helworks\helengine\scripts\build-platform.ps1 ` -Project C:\dev\helprojs\city\project.heproj ` -Platform ds ` -Output C:\dev\helprojs\city\ds-build ` -BuildProfile release ` -CacheRoot D:\helengine-cache ``` मुख्य पैरामीटर में `-Project` (`.heproj` का पथ), `-Platform` (प्रोजेक्ट की `settings/platforms.json` में घोषित), `-Output` (आउटपुट निर्देशिका), `-BuildProfile` (जैसे, `debug` या `release`), `-CacheRoot` (पुन: प्रयोज्य कैश स्थान), `-LockTimeout`, `-Clean`, `-PruneCacheOlderThanDays`, और अतिरिक्त एडिटर CLI तर्कों के लिए `-AdditionalArgs` शामिल हैं। रैपर सत्यापित समापन के लिए बिल्ड प्रतीक्षा का भी समर्थन करता है। ## मॉड्यूल और बिल्ड मोड प्रोजेक्ट कोड `code.module.json` घोषणाओं का उपयोग करता है। रनटाइम मॉड्यूल केवल रनटाइम मॉड्यूल पर निर्भर करते हैं; एडिटर-केवल मॉड्यूल `"moduleKind": "editor"` का उपयोग करते हैं और रनटाइम मॉड्यूल पर निर्भर हो सकते हैं। परीक्षण फ़ोल्डरों का नाम `<module-id>.tests` होना चाहिए और घोषित उत्पादन मॉड्यूल से मेल खाना चाहिए। इंटरैक्टिव एडिटर सत्र और एडिटर कमांड `EditorFull` (रनटाइम + एडिटर मॉड्यूल + परीक्षण शामिल) का उपयोग करते हैं, जबकि प्लेटफ़ॉर्म बिल्ड `RuntimeOnly` (परीक्षण/एडिटर कमांड को छोड़कर) का उपयोग करते हैं। प्लेटफ़ॉर्म बिल्ड प्रोफाइल `editorPrebuildCommandIdsByBuildProfileId` के माध्यम से क्रमबद्ध प्रीबिल्ड कमांड घोषित कर सकते हैं। ## कैश और आह्वान अनुबंध पुन: प्रयोज्य `v2` कैश विहित प्रोजेक्ट पथ और एडिटर चेकआउट से व्युत्पन्न नियतात्मक पहचान का उपयोग करता है। बिल्ड प्रति प्रोजेक्ट एक प्रोजेक्ट लॉक और प्रति आउटपुट एक आउटपुट लॉक के माध्यम से क्रमबद्ध होते हैं; विभिन्न प्रोजेक्ट केवल तभी ओवरलैप हो सकते हैं यदि विभिन्न आउटपुट का उपयोग करते हैं। रैपर प्रोजेक्ट की प्रतिलिपि नहीं बनाता; यह स्थान पर बनाता है और मध्यवर्ती को कैश में रखता है। `HELENGINE_BUILD_INVOCATION_ID` एक आंतरिक सहसंबंध GUID है, उपयोगकर्ता सेटिंग नहीं। निकास कोड (`0`, `2`, `3`, `4`, `5`, `6`, `10`) रैपर और सत्यापन विफलताओं का वर्णन करते हैं; चाइल्ड प्रक्रिया निकास कोड मेल खा सकते हैं, इसलिए कॉलर्स को निदान और `.helengine-build-state.json` का निरीक्षण करना चाहिए। ## कोडजेन C#-से-C++ कोडजेन `engine/vendor/csharpcodegen` पर एक git सबमॉड्यूल है, जो इंजन कमिट द्वारा पिन किया गया है। बिल्ड स्क्रिप्ट इसे एडिटर के बगल में `codegen/` निर्देशिका में प्रकाशित करती है, जिसका उपयोग प्लेटफ़ॉर्म बिल्ड के लिए किया जाता है। प्लेटफ़ॉर्म प्रविष्टियाँ अब `codegenToolPath` नहीं रखती हैं; अनुस्मारक चेतावनी के साथ अनदेखा किए जाते हैं। क्लोनिंग या ब्रांच स्विचिंग के बाद, `git submodule update --init --recursive` चलाएँ। ## सत्यापित बिल्ड प्रतीक्षा `tools/build-waiter` निकास कोड, एक वर्तमान `.helengine-build-state.json`, और आवश्यक आर्टिफैक्ट ताजगी (जैसे, `game.iso`, `disc/SYSTEM.CNF`) को कैप्चर करके बिल्ड के सफलतापूर्वक पूरा होने की प्रतीक्षा करता है। यह एक स्वीकृति चरण के माध्यम से रैपर के साथ समन्वय करता है। वेटर-नियंत्रित कॉल में, रैपर स्वीकृति अनुपस्थित होने पर 30 सेकंड के बाद निकास कोड `10` के साथ विफल हो जाता है। उदाहरण PS2 बिल्ड: ```powershell dotnet run --project ...\helengine.buildwaiter.csproj -- ` --output ...\output\ps2 ` --require game.iso ` --require disc/SYSTEM.CNF ` --require disc/HELENGIN.ELF ` -- powershell ... -File ...\build-platform.ps1 -Project ... -Platform ps2 -Output ... ``` ## नेटिव स्टेबल-कैश स्मोक एक Windows नेटिव स्मोक टेस्ट (`scripts/tests/build-platform-native-cache-smoke.tests.ps1`) के लिए बाहरी सहोदर प्लेटफ़ॉर्म स्रोत, Visual Studio C++ टूल्स, CMake, Ninja, और Windows बिल्डर की आवश्यकता होती है। यह एक छोटे फिक्स्चर को समान कैश के साथ दो बार बनाता है, एक गैर-खाली `helengine_windows.exe` और एक वर्तमान बिल्ड-स्टेट फ़ाइल की अपेक्षा करता है। इसे स्पष्ट रूप से चलाएँ; यह डिफ़ॉल्ट सूट में नहीं है।