diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..5af8ad8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,57 @@ +name: Bug report +description: Report a reproducible ZeroEngine package bug +title: "[Bug]: " +labels: ["bug"] +body: + - type: input + id: package + attributes: + label: Package + description: Package name, for example com.zerogamestudio.zeroengine.pathfinding2d. + validations: + required: true + - type: input + id: version + attributes: + label: Version or commit + description: Package version or Git commit hash. + validations: + required: true + - type: input + id: unity + attributes: + label: Unity version + placeholder: 2022.3.62f1 + validations: + required: true + - type: textarea + id: repro + attributes: + label: Reproduction steps + description: Provide the smallest steps that reproduce the issue. + placeholder: | + 1. Create/open a Unity project + 2. Install ... + 3. Run ... + 4. Observe ... + validations: + required: true + - type: textarea + id: expected + attributes: + label: Expected behavior + validations: + required: true + - type: textarea + id: actual + attributes: + label: Actual behavior + validations: + required: true + - type: textarea + id: logs + attributes: + label: Logs or screenshots + description: Paste Unity console errors, stack traces, or screenshots if useful. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..9036dba --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,33 @@ +name: Feature request +description: Request a focused ZeroEngine package improvement +title: "[Feature]: " +labels: ["enhancement"] +body: + - type: input + id: package + attributes: + label: Package + description: Package name or area. + validations: + required: true + - type: textarea + id: workflow + attributes: + label: Workflow + description: What game development workflow should improve? + validations: + required: true + - type: textarea + id: current + attributes: + label: Current limitation + description: Why are existing APIs or tools insufficient? + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposed shape + description: Describe the smallest useful API, editor tool, or behavior change. + validations: + required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..0b9b4d8 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ +## Summary + +- + +## Packages Touched + +- + +## Verification + +- [ ] Ran focused Unity EditMode tests +- [ ] Checked affected package manifests +- [ ] Updated docs or README when behavior changed + +## Notes + +Describe any migration, compatibility, or downstream project impact. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..d1e2b7f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,14 @@ +# Changelog + +ZeroEngine is developed as a multi-package repository. Package versions are +tracked in each package's `package.json`. + +## Unreleased + +- Added root open-source project documentation. +- Added contribution, support, and security guidance. +- Declared MIT licensing for external reuse. +- Normalized repository metadata for public UPM package consumption. + +For package-specific changes, inspect the package README, package version, and +Git history for the relevant `com.zerogamestudio.*` directory. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..2254276 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,47 @@ +# Contributing to ZeroEngine + +ZeroEngine is a multi-package Unity repository. Keep changes scoped to the +package and behavior you are improving. + +## Development Rules + +- Use Unity 2022.3 LTS unless a package explicitly documents a newer + requirement. +- Prefer package-local changes over framework-wide abstractions. +- Keep runtime code in `Runtime/` and editor-only code in `Editor/`. +- Include `.meta` files whenever Unity assets, folders, asmdefs, samples, or + tests are added, moved, or deleted. +- Do not edit generated Unity folders such as `Library/`, `Temp/`, or generated + IDE project files. + +## Package Metadata + +Each package should have a valid `package.json` with: + +- `name`, `version`, `displayName`, `description`, `unity`, and `author`. +- `license` set to `MIT`. +- `repository.url` pointing to `https://github.com/liuzqk/zeroengine.git` when + repository metadata is present. +- `repository.directory` matching the top-level package folder when present. + +## Testing + +For runtime logic, add focused EditMode tests under the package `Tests/Editor/` +folder. Use PlayMode tests only when Unity lifecycle, physics, scenes, prefabs, +or coroutines are required. + +The GitHub workflow builds a temporary Unity project and runs EditMode tests +with GameCI. Local verification can use Unity Test Runner with the smallest +relevant package test assembly. + +## Pull Requests + +- Explain the user-facing reason for the change. +- List the package or packages touched. +- Include the verification you ran. +- Keep unrelated formatting and refactors out of the PR. + +## License + +By contributing, you agree that your contribution is provided under the +repository's MIT License. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7d468fd --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 ZeroGameStudio + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5e77bb1 --- /dev/null +++ b/README.md @@ -0,0 +1,109 @@ +# ZeroEngine + +[![Unity Tests](https://github.com/liuzqk/zeroengine/actions/workflows/tests.yml/badge.svg)](https://github.com/liuzqk/zeroengine/actions/workflows/tests.yml) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) +[![Unity 2022.3+](https://img.shields.io/badge/Unity-2022.3%2B-black.svg)](https://unity.com/releases/editor/archive) + +ZeroEngine is a modular Unity game framework maintained by ZeroGameStudio. It +is organized as a set of Unity Package Manager packages so projects can depend +on only the systems they need. + +The packages are developed against Unity 2022.3 LTS and are used by the POB +Unity project for production gameplay tooling and runtime systems. + +## Why This Exists + +Unity game projects often rebuild the same infrastructure: singleton and event +helpers, pooled runtime objects, save data, quests, platform navigation, UI +panels, editor data browsers, and game-specific debugging tools. ZeroEngine +keeps those systems in reusable packages with focused tests instead of burying +them inside one game repository. + +## Package Highlights + +| Package | Purpose | +| --- | --- | +| `com.zerogamestudio.zeroengine.core` | Core helpers, logging, pooling, singleton patterns, and performance utilities. | +| `com.zerogamestudio.zeroengine.data` | Data and stat systems for game configuration and runtime values. | +| `com.zerogamestudio.zeroengine.data-toolkit` | Editor tooling for browsing, inspecting, and validating project data assets. | +| `com.zerogamestudio.zeroengine.gameplay` | Reusable gameplay mechanics and trigger helpers. | +| `com.zerogamestudio.zeroengine.narrative` | Quest and narrative runtime services. | +| `com.zerogamestudio.zeroengine.pathfinding2d` | 2D platform navigation, graph generation, jump links, route costs, and diagnostics. | +| `com.zerogamestudio.zeroengine.persistence` | Save and persistence infrastructure. | +| `com.zerogamestudio.zeroengine.ui` | Runtime UI framework and toast notification systems. | +| `com.zerogamestudio.analytics` | Self-hostable analytics and bug feedback SDK. | + +Additional packages in this repository cover AI, audio, combat, economy, +input, localization, network, RPG, social, world, and editor dashboard systems. + +## Installation + +Add packages through Unity Package Manager using a Git URL with the package +path you need: + +```text +https://github.com/liuzqk/zeroengine.git?path=com.zerogamestudio.zeroengine.core#main +``` + +For example, a project `Packages/manifest.json` can pin several packages: + +```json +{ + "dependencies": { + "com.zerogamestudio.zeroengine.core": "https://github.com/liuzqk/zeroengine.git?path=com.zerogamestudio.zeroengine.core#main", + "com.zerogamestudio.zeroengine.pathfinding2d": "https://github.com/liuzqk/zeroengine.git?path=com.zerogamestudio.zeroengine.pathfinding2d#main", + "com.zerogamestudio.zeroengine.ui": "https://github.com/liuzqk/zeroengine.git?path=com.zerogamestudio.zeroengine.ui#main" + } +} +``` + +Production projects should pin a tested commit hash instead of `#main`. + +## Repository Layout + +Each top-level `com.zerogamestudio.*` directory is a UPM package. Most packages +follow the same structure: + +```text +com.zerogamestudio.zeroengine./ + Runtime/ + Editor/ + Tests/ + Samples~/ + package.json + README.md +``` + +Not every package has every folder; small runtime-only packages stay minimal. + +## Testing + +The repository includes a GitHub Actions workflow that builds a temporary Unity +project and runs EditMode tests through GameCI. + +For local work, open a Unity 2022.3 project that references the package under +test, then run the relevant EditMode tests from Unity Test Runner. Keep new +tests narrow and package-scoped. + +## Support And Security + +- Use [GitHub issues](https://github.com/liuzqk/zeroengine/issues) for + reproducible bugs and focused feature requests. +- See [SUPPORT.md](SUPPORT.md) for the information maintainers need. +- See [SECURITY.md](SECURITY.md) for private security reporting guidance. + +## Current Production Users + +The POB Unity project depends on multiple ZeroEngine packages, including +analytics, core, data, data-toolkit, economy, gameplay, narrative, +pathfinding2d, persistence, and UI. This gives the packages a real production +feedback loop while keeping reusable code outside the game-specific repository. + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) before opening issues or pull requests. +Small, tested fixes are preferred over broad rewrites. + +## License + +ZeroEngine is available under the [MIT License](LICENSE). diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..e95e1ff --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,29 @@ +# Security Policy + +## Supported Scope + +Security reports should focus on vulnerabilities in ZeroEngine package code, +editor tooling, self-hosted analytics upload flows, and generated runtime +configuration that could expose project data or execute unintended code. + +Unity project-specific content, game assets, and downstream game logic are +outside this repository unless the issue is caused by reusable ZeroEngine code. + +## Reporting + +Do not open a public GitHub issue for security concerns. Send a private report +to the maintainers with: + +- The affected package name and version or commit hash. +- Reproduction steps. +- Expected and observed impact. +- Any relevant logs, stack traces, or minimal sample project details. + +If a private security advisory is available on the GitHub repository, prefer +that channel. + +## Response Expectations + +Maintainers will triage reports based on reproducibility, affected packages, +and severity. Fixes should include focused tests when the behavior is +testable without exposing sensitive data. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 0000000..29f5d02 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,19 @@ +# Support + +Use GitHub issues for reproducible bugs, documentation gaps, and focused +feature requests. + +For bug reports, include: + +- Package name and version or commit hash. +- Unity version. +- Platform. +- Minimal reproduction steps. +- Console errors or relevant logs. +- Whether the issue reproduces in a clean Unity project. + +For feature requests, describe the game development workflow being improved +and why existing package APIs are insufficient. + +Project-specific integration questions for private games may be closed if they +cannot be answered from reusable ZeroEngine code. diff --git a/com.zerogamestudio.analytics/package.json b/com.zerogamestudio.analytics/package.json index 2ba6dfa..9ab80ef 100644 --- a/com.zerogamestudio.analytics/package.json +++ b/com.zerogamestudio.analytics/package.json @@ -1,8 +1,14 @@ { - "name": "com.zerogamestudio.analytics", - "version": "1.2.2", - "displayName": "ZGS Analytics", - "description": "ZeroGameStudio 游戏分析 SDK,支持自建 ClickHouse 数据平台", - "unity": "2021.3", - "dependencies": {} -} \ No newline at end of file + "name": "com.zerogamestudio.analytics", + "version": "1.2.2", + "displayName": "ZGS Analytics", + "description": "ZeroGameStudio 游戏分析 SDK,支持自建 ClickHouse 数据平台", + "unity": "2021.3", + "dependencies": {}, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.analytics" + } +} diff --git a/com.zerogamestudio.zeroengine.ai/package.json b/com.zerogamestudio.zeroengine.ai/package.json index c5f1661..2e79077 100644 --- a/com.zerogamestudio.zeroengine.ai/package.json +++ b/com.zerogamestudio.zeroengine.ai/package.json @@ -1,25 +1,31 @@ { - "name": "com.zerogamestudio.zeroengine.ai", - "version": "2.0.0", - "displayName": "ZeroEngine.AI", - "description": "AI decision systems for ZeroEngine. Includes FSM (Finite State Machine), Behavior Tree, UtilityAI (self-developed), GOAP bridge (crashkonijn/GOAP adapter), and NPC Schedule system.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0" - }, - "keywords": [ - "zeroengine", - "ai", - "fsm", - "state-machine", - "behavior-tree", - "utility-ai", - "goap", - "npc-schedule" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.ai", + "version": "2.0.0", + "displayName": "ZeroEngine.AI", + "description": "AI decision systems for ZeroEngine. Includes FSM (Finite State Machine), Behavior Tree, UtilityAI (self-developed), GOAP bridge (crashkonijn/GOAP adapter), and NPC Schedule system.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0" + }, + "keywords": [ + "zeroengine", + "ai", + "fsm", + "state-machine", + "behavior-tree", + "utility-ai", + "goap", + "npc-schedule" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.ai" + } } diff --git a/com.zerogamestudio.zeroengine.audio/package.json b/com.zerogamestudio.zeroengine.audio/package.json index cd11a78..7449d6c 100644 --- a/com.zerogamestudio.zeroengine.audio/package.json +++ b/com.zerogamestudio.zeroengine.audio/package.json @@ -1,14 +1,27 @@ { - "name": "com.zerogamestudio.zeroengine.audio", - "version": "2.0.0", - "displayName": "ZeroEngine.Audio", - "description": "Audio management for ZeroEngine. Includes AudioManager with BGM/SFX channels, pooled audio sources, and volume control.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.persistence": "2.0.0" - }, - "keywords": ["zeroengine", "audio", "sound", "music"], - "author": { "name": "ZeroGameStudio" } + "name": "com.zerogamestudio.zeroengine.audio", + "version": "2.0.0", + "displayName": "ZeroEngine.Audio", + "description": "Audio management for ZeroEngine. Includes AudioManager with BGM/SFX channels, pooled audio sources, and volume control.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.persistence": "2.0.0" + }, + "keywords": [ + "zeroengine", + "audio", + "sound", + "music" + ], + "author": { + "name": "ZeroGameStudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.audio" + } } diff --git a/com.zerogamestudio.zeroengine.autobattle/package.json b/com.zerogamestudio.zeroengine.autobattle/package.json index e3ac96d..54b7481 100644 --- a/com.zerogamestudio.zeroengine.autobattle/package.json +++ b/com.zerogamestudio.zeroengine.autobattle/package.json @@ -1,31 +1,32 @@ { - "name": "com.zerogamestudio.zeroengine.autobattle", - "version": "1.0.0", - "displayName": "ZeroEngine.AutoBattle", - "description": "Auto-battle framework for grid-based tactical combat. Includes grid system, battle units, skill configuration, AI strategy, and formation management.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.combat": "2.0.0", - "com.zerogamestudio.zeroengine.data": "2.0.0", - "com.zerogamestudio.zeroengine.ai": "2.0.0" - }, - "keywords": [ - "zeroengine", - "autobattle", - "grid", - "tactical", - "formation", - "ai" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - }, - "repository": { - "type": "git", - "url": "https://github.com/zerogamestudio/zeroengine.git", - "directory": "Packages/com.zerogamestudio.zeroengine.autobattle" - } + "name": "com.zerogamestudio.zeroengine.autobattle", + "version": "1.0.0", + "displayName": "ZeroEngine.AutoBattle", + "description": "Auto-battle framework for grid-based tactical combat. Includes grid system, battle units, skill configuration, AI strategy, and formation management.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.combat": "2.0.0", + "com.zerogamestudio.zeroengine.data": "2.0.0", + "com.zerogamestudio.zeroengine.ai": "2.0.0" + }, + "keywords": [ + "zeroengine", + "autobattle", + "grid", + "tactical", + "formation", + "ai" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.autobattle" + }, + "license": "MIT" } diff --git a/com.zerogamestudio.zeroengine.character/package.json b/com.zerogamestudio.zeroengine.character/package.json index a7669ef..2bd629c 100644 --- a/com.zerogamestudio.zeroengine.character/package.json +++ b/com.zerogamestudio.zeroengine.character/package.json @@ -1,15 +1,36 @@ { - "name": "com.zerogamestudio.zeroengine.character", - "version": "2.6.0", - "displayName": "ZeroEngine.Character", - "description": "Character progression systems for ZeroEngine. Includes Equipment System, Talent Tree System, Party System, Formation System, Job System, Sect System (门派), MartialArts System (武学), and Realm System (境界).", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.data": "2.0.0", - "com.zerogamestudio.zeroengine.persistence": "2.0.0" - }, - "keywords": ["zeroengine", "equipment", "talent", "progression", "party", "formation", "job", "class", "sect", "martial-arts", "realm", "wuxia"], - "author": { "name": "ZeroGameStudio" } + "name": "com.zerogamestudio.zeroengine.character", + "version": "2.6.0", + "displayName": "ZeroEngine.Character", + "description": "Character progression systems for ZeroEngine. Includes Equipment System, Talent Tree System, Party System, Formation System, Job System, Sect System (门派), MartialArts System (武学), and Realm System (境界).", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.data": "2.0.0", + "com.zerogamestudio.zeroengine.persistence": "2.0.0" + }, + "keywords": [ + "zeroengine", + "equipment", + "talent", + "progression", + "party", + "formation", + "job", + "class", + "sect", + "martial-arts", + "realm", + "wuxia" + ], + "author": { + "name": "ZeroGameStudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.character" + } } diff --git a/com.zerogamestudio.zeroengine.combat/package.json b/com.zerogamestudio.zeroengine.combat/package.json index f702b58..01f5a40 100644 --- a/com.zerogamestudio.zeroengine.combat/package.json +++ b/com.zerogamestudio.zeroengine.combat/package.json @@ -1,27 +1,33 @@ { - "name": "com.zerogamestudio.zeroengine.combat", - "version": "2.0.0", - "displayName": "ZeroEngine.Combat", - "description": "Combat framework for ZeroEngine. Includes Combat Core (CombatManager, team relations), Damage System (types, calculators), Targeting (selectors, filters, range), Health System, AbilitySystem (TCE pattern), Projectile, and Spawner.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.data": "2.0.0" - }, - "keywords": [ - "zeroengine", - "combat", - "damage", - "health", - "targeting", - "ability", - "skill", - "projectile", - "spawner" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.combat", + "version": "2.0.0", + "displayName": "ZeroEngine.Combat", + "description": "Combat framework for ZeroEngine. Includes Combat Core (CombatManager, team relations), Damage System (types, calculators), Targeting (selectors, filters, range), Health System, AbilitySystem (TCE pattern), Projectile, and Spawner.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.data": "2.0.0" + }, + "keywords": [ + "zeroengine", + "combat", + "damage", + "health", + "targeting", + "ability", + "skill", + "projectile", + "spawner" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.combat" + } } diff --git a/com.zerogamestudio.zeroengine.core/package.json b/com.zerogamestudio.zeroengine.core/package.json index 8013457..98230bb 100644 --- a/com.zerogamestudio.zeroengine.core/package.json +++ b/com.zerogamestudio.zeroengine.core/package.json @@ -1,28 +1,29 @@ { - "name": "com.zerogamestudio.zeroengine.core", - "version": "2.0.0", - "displayName": "ZeroEngine.Core", - "description": "Core infrastructure for ZeroEngine framework. Includes Singleton patterns (Singleton, MonoSingleton, PersistentSingleton), EventManager, Object Pooling (PoolManager, IPoolable), Performance utilities (ZeroGC, ListPool, FormattedValueCache), and common utilities (ZeroLog, DateUtils).", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": {}, - "keywords": [ - "zeroengine", - "core", - "singleton", - "event", - "pool", - "performance", - "gc", - "utility" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - }, - "repository": { - "type": "git", - "url": "https://github.com/zerogamestudio/zeroengine.git", - "directory": "Packages/com.zerogamestudio.zeroengine.core" - } + "name": "com.zerogamestudio.zeroengine.core", + "version": "2.0.0", + "displayName": "ZeroEngine.Core", + "description": "Core infrastructure for ZeroEngine framework. Includes Singleton patterns (Singleton, MonoSingleton, PersistentSingleton), EventManager, Object Pooling (PoolManager, IPoolable), Performance utilities (ZeroGC, ListPool, FormattedValueCache), and common utilities (ZeroLog, DateUtils).", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": {}, + "keywords": [ + "zeroengine", + "core", + "singleton", + "event", + "pool", + "performance", + "gc", + "utility" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.core" + }, + "license": "MIT" } diff --git a/com.zerogamestudio.zeroengine.dashboard/package.json b/com.zerogamestudio.zeroengine.dashboard/package.json index bb57aab..25d7191 100644 --- a/com.zerogamestudio.zeroengine.dashboard/package.json +++ b/com.zerogamestudio.zeroengine.dashboard/package.json @@ -1,19 +1,25 @@ { - "name": "com.zerogamestudio.zeroengine.dashboard", - "version": "1.0.0", - "displayName": "ZeroEngine Dashboard", - "description": "ZeroEngine 编辑器控制中心,支持轻量项目使用。通过条件编译自动适配已安装的包。", - "unity": "2022.3", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "1.0.0" - }, - "keywords": [ - "editor", - "dashboard", - "tools" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.dashboard", + "version": "1.0.0", + "displayName": "ZeroEngine Dashboard", + "description": "ZeroEngine 编辑器控制中心,支持轻量项目使用。通过条件编译自动适配已安装的包。", + "unity": "2022.3", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "1.0.0" + }, + "keywords": [ + "editor", + "dashboard", + "tools" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.dashboard" + } } diff --git a/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/DataToolkitProjectProfile.cs b/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/DataToolkitProjectProfile.cs index a195192..a38fd0a 100644 --- a/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/DataToolkitProjectProfile.cs +++ b/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/DataToolkitProjectProfile.cs @@ -9,7 +9,8 @@ public sealed class DataToolkitProjectProfile public DataToolkitProjectProfile( DataToolkitProjectSettings settings, IEnumerable toolbarProviders = null, - IEnumerable assetInspectorProviders = null) + IEnumerable assetInspectorProviders = null, + IEnumerable footerProviders = null) { Settings = settings ?? throw new ArgumentNullException(nameof(settings)); ToolbarProviders = (toolbarProviders ?? Array.Empty()) @@ -20,10 +21,15 @@ public DataToolkitProjectProfile( .Where(provider => provider != null) .OrderBy(provider => provider.Order) .ToArray(); + FooterProviders = (footerProviders ?? Array.Empty()) + .Where(provider => provider != null) + .OrderBy(provider => provider.Order) + .ToArray(); } public DataToolkitProjectSettings Settings { get; } public IReadOnlyList ToolbarProviders { get; } public IReadOnlyList AssetInspectorProviders { get; } + public IReadOnlyList FooterProviders { get; } } } diff --git a/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/IDataToolkitFooterProvider.cs b/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/IDataToolkitFooterProvider.cs new file mode 100644 index 0000000..5d82ea0 --- /dev/null +++ b/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/IDataToolkitFooterProvider.cs @@ -0,0 +1,9 @@ +namespace ZGS.DataToolkit.Editor +{ + public interface IDataToolkitFooterProvider + { + int Order { get; } + bool IsVisible(DataToolkitContext context); + void DrawFooter(DataToolkitContext context); + } +} diff --git a/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/IDataToolkitFooterProvider.cs.meta b/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/IDataToolkitFooterProvider.cs.meta new file mode 100644 index 0000000..7e928b8 --- /dev/null +++ b/com.zerogamestudio.zeroengine.data-toolkit/Editor/Core/IDataToolkitFooterProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f64b87e007e25c44aac78c77fd0ddfb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.zerogamestudio.zeroengine.data-toolkit/Editor/Windows/DataToolkitWindow.cs b/com.zerogamestudio.zeroengine.data-toolkit/Editor/Windows/DataToolkitWindow.cs index 09795b7..4c19e71 100644 --- a/com.zerogamestudio.zeroengine.data-toolkit/Editor/Windows/DataToolkitWindow.cs +++ b/com.zerogamestudio.zeroengine.data-toolkit/Editor/Windows/DataToolkitWindow.cs @@ -17,7 +17,9 @@ public sealed class DataToolkitWindow : EditorWindow private const float WindowPadding = 4f; private const float HeaderRowHeight = 38f; private const float ProjectToolbarRowHeight = 64f; + private const float ProjectFooterRowHeight = 34f; private const float HeaderBodySpacing = 4f; + private const float BodyFooterSpacing = 4f; private const float SplitterWidth = 5f; private const float RowHeight = 24f; private const long LargeAssetInspectorThresholdBytes = 512 * 1024; @@ -28,6 +30,7 @@ public sealed class DataToolkitWindow : EditorWindow private DataToolkitContext context; private IReadOnlyList toolbarProviders = Array.Empty(); + private IReadOnlyList footerProviders = Array.Empty(); private Type[] typesToDisplay = Array.Empty(); private Type selectedType; private string selectedAssetPath; @@ -103,6 +106,7 @@ private void Initialize(DataToolkitProjectProfile profile) var settings = profile.Settings; context = new DataToolkitContext(settings); toolbarProviders = profile.ToolbarProviders; + footerProviders = profile.FooterProviders; inspector.SetCustomInspectors(context, profile.AssetInspectorProviders); titleContent = new GUIContent(settings.WindowTitle); minSize = new Vector2(980f, 560f); @@ -145,17 +149,26 @@ private void OnGUI() { EnsureContext(); var visibleToolbarProviders = GetVisibleToolbarProviders(); + var visibleFooterProviders = GetVisibleFooterProviders(); var headerHeight = CalculateHeaderHeight(visibleToolbarProviders.Count); + var footerHeight = CalculateFooterHeight(visibleFooterProviders.Count); + var footerSpacing = footerHeight > 0f ? BodyFooterSpacing : 0f; var contentWidth = Mathf.Max(0f, position.width - WindowPadding * 2f); var headerRect = new Rect(WindowPadding, WindowPadding, contentWidth, headerHeight); var bodyRect = new Rect( WindowPadding, headerRect.yMax + HeaderBodySpacing, contentWidth, - Mathf.Max(0f, position.height - headerRect.yMax - HeaderBodySpacing - WindowPadding)); + Mathf.Max(0f, position.height - headerRect.yMax - HeaderBodySpacing - footerHeight - footerSpacing - WindowPadding)); + var footerRect = new Rect( + WindowPadding, + position.height - WindowPadding - footerHeight, + contentWidth, + footerHeight); DrawHeaderToolbar(headerRect, visibleToolbarProviders); DrawBodyLayout(bodyRect); + DrawFooterToolbar(footerRect, visibleFooterProviders); } private void EnsureContext() @@ -182,6 +195,11 @@ private float CalculateHeaderHeight(int visibleToolbarCount) return HeaderRowHeight + visibleToolbarCount * ProjectToolbarRowHeight; } + private float CalculateFooterHeight(int visibleFooterCount) + { + return visibleFooterCount <= 0 ? 0f : visibleFooterCount * ProjectFooterRowHeight; + } + private IReadOnlyList GetVisibleToolbarProviders() { var visibleProviders = new List(); @@ -209,6 +227,33 @@ private IReadOnlyList GetVisibleToolbarProviders() return visibleProviders; } + private IReadOnlyList GetVisibleFooterProviders() + { + var visibleProviders = new List(); + + foreach (var footerProvider in footerProviders) + { + if (footerProvider == null) + { + continue; + } + + try + { + if (footerProvider.IsVisible(context)) + { + visibleProviders.Add(footerProvider); + } + } + catch (Exception exception) + { + Debug.LogException(exception); + } + } + + return visibleProviders; + } + private void DrawHeaderToolbar(Rect rect, IReadOnlyList visibleToolbarProviders) { GUILayout.BeginArea(rect); @@ -245,6 +290,36 @@ private void DrawProjectToolbars(IReadOnlyList visi } } + private void DrawFooterToolbar(Rect rect, IReadOnlyList visibleFooterProviders) + { + if (visibleFooterProviders.Count == 0) + { + return; + } + + GUILayout.BeginArea(rect); + using (new EditorGUILayout.VerticalScope(EditorStyles.helpBox, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true))) + { + DrawProjectFooters(visibleFooterProviders); + } + GUILayout.EndArea(); + } + + private void DrawProjectFooters(IReadOnlyList visibleFooterProviders) + { + foreach (var footerProvider in visibleFooterProviders) + { + try + { + footerProvider.DrawFooter(context); + } + catch (Exception exception) + { + Debug.LogException(exception); + } + } + } + private void DrawBodyLayout(Rect bodyRect) { var layoutRects = CalculateBodyLayoutRects(bodyRect); diff --git a/com.zerogamestudio.zeroengine.data-toolkit/README.md b/com.zerogamestudio.zeroengine.data-toolkit/README.md new file mode 100644 index 0000000..375d3ea --- /dev/null +++ b/com.zerogamestudio.zeroengine.data-toolkit/README.md @@ -0,0 +1,32 @@ +# ZeroEngine.DataToolkit + +Reusable Unity editor tooling for discovering, browsing, inspecting, and +validating project data assets. + +## Use Cases + +- Browse ScriptableObject data collections from a single editor window. +- Inspect large data assets without forcing expensive full inspector rendering. +- Add project-specific actions and footers around reusable data views. +- Keep designer-facing data workflows outside game-specific editor code. + +## Installation + +Add the package through Unity Package Manager: + +```text +https://github.com/liuzqk/zeroengine.git?path=com.zerogamestudio.zeroengine.data-toolkit#main +``` + +Production projects should pin a tested commit hash instead of `#main`. + +## Requirements + +- Unity 2022.3 or newer. +- Optional Odin/Sirenix integrations are used only when a downstream project + has those assemblies available. + +## Notes For Maintainers + +This package is intentionally editor-only. Keep runtime dependencies out of the +package unless the data browsing workflow cannot work without them. diff --git a/com.zerogamestudio.zeroengine.data-toolkit/README.md.meta b/com.zerogamestudio.zeroengine.data-toolkit/README.md.meta new file mode 100644 index 0000000..f74d6b7 --- /dev/null +++ b/com.zerogamestudio.zeroengine.data-toolkit/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5c9970d7979b49f9a5d626ad040e4087 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.zerogamestudio.zeroengine.data-toolkit/package.json b/com.zerogamestudio.zeroengine.data-toolkit/package.json index b821006..0f77952 100644 --- a/com.zerogamestudio.zeroengine.data-toolkit/package.json +++ b/com.zerogamestudio.zeroengine.data-toolkit/package.json @@ -15,5 +15,11 @@ "author": { "name": "ZeroGameStudio", "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.data-toolkit" } } diff --git a/com.zerogamestudio.zeroengine.data/package.json b/com.zerogamestudio.zeroengine.data/package.json index 05059b5..1ccdb8c 100644 --- a/com.zerogamestudio.zeroengine.data/package.json +++ b/com.zerogamestudio.zeroengine.data/package.json @@ -1,24 +1,30 @@ { - "name": "com.zerogamestudio.zeroengine.data", - "version": "2.0.0", - "displayName": "ZeroEngine.Data", - "description": "Data systems for ZeroEngine. Includes StatSystem (attributes, modifiers, constraints) and BuffSystem (buff management, stacking, duration, stat integration).", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0" - }, - "keywords": [ - "zeroengine", - "stat", - "attribute", - "modifier", - "buff", - "debuff", - "status-effect" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.data", + "version": "2.0.0", + "displayName": "ZeroEngine.Data", + "description": "Data systems for ZeroEngine. Includes StatSystem (attributes, modifiers, constraints) and BuffSystem (buff management, stacking, duration, stat integration).", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0" + }, + "keywords": [ + "zeroengine", + "stat", + "attribute", + "modifier", + "buff", + "debuff", + "status-effect" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.data" + } } diff --git a/com.zerogamestudio.zeroengine.dungeon/package.json b/com.zerogamestudio.zeroengine.dungeon/package.json index 1a7b09e..81d66df 100644 --- a/com.zerogamestudio.zeroengine.dungeon/package.json +++ b/com.zerogamestudio.zeroengine.dungeon/package.json @@ -1,24 +1,30 @@ { - "name": "com.zerogamestudio.zeroengine.dungeon", - "version": "1.0.0", - "displayName": "ZeroEngine.Dungeon", - "description": "Dungeon exploration framework with procedural node map generation, AI pathfinding, event system, and reward calculation.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.data": "2.0.0" - }, - "keywords": [ - "zeroengine", - "dungeon", - "exploration", - "roguelike", - "procedural", - "node" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.dungeon", + "version": "1.0.0", + "displayName": "ZeroEngine.Dungeon", + "description": "Dungeon exploration framework with procedural node map generation, AI pathfinding, event system, and reward calculation.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.data": "2.0.0" + }, + "keywords": [ + "zeroengine", + "dungeon", + "exploration", + "roguelike", + "procedural", + "node" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.dungeon" + } } diff --git a/com.zerogamestudio.zeroengine.economy/package.json b/com.zerogamestudio.zeroengine.economy/package.json index 7321ce3..b971e9c 100644 --- a/com.zerogamestudio.zeroengine.economy/package.json +++ b/com.zerogamestudio.zeroengine.economy/package.json @@ -1,26 +1,32 @@ { - "name": "com.zerogamestudio.zeroengine.economy", - "version": "2.0.0", - "displayName": "ZeroEngine.Economy", - "description": "Economy and item systems for ZeroEngine. Includes Inventory (multi-container, stacking, filters), Loot Tables (weighted, pity, layered), Shop System, and Crafting System (recipes, skills).", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.persistence": "2.0.0" - }, - "keywords": [ - "zeroengine", - "inventory", - "item", - "loot", - "drop", - "shop", - "crafting", - "recipe" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.economy", + "version": "2.0.0", + "displayName": "ZeroEngine.Economy", + "description": "Economy and item systems for ZeroEngine. Includes Inventory (multi-container, stacking, filters), Loot Tables (weighted, pity, layered), Shop System, and Crafting System (recipes, skills).", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.persistence": "2.0.0" + }, + "keywords": [ + "zeroengine", + "inventory", + "item", + "loot", + "drop", + "shop", + "crafting", + "recipe" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.economy" + } } diff --git a/com.zerogamestudio.zeroengine.gameplay/package.json b/com.zerogamestudio.zeroengine.gameplay/package.json index 185562d..24f2c7c 100644 --- a/com.zerogamestudio.zeroengine.gameplay/package.json +++ b/com.zerogamestudio.zeroengine.gameplay/package.json @@ -1,14 +1,27 @@ { - "name": "com.zerogamestudio.zeroengine.gameplay", - "version": "2.0.0", - "displayName": "ZeroEngine.Gameplay", - "description": "Gameplay mechanics for ZeroEngine. Includes Interaction System, Tutorial System (sequences, steps), and Command Pattern (undo/redo).", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.persistence": "2.0.0" - }, - "keywords": ["zeroengine", "interaction", "tutorial", "command"], - "author": { "name": "ZeroGameStudio" } + "name": "com.zerogamestudio.zeroengine.gameplay", + "version": "2.0.0", + "displayName": "ZeroEngine.Gameplay", + "description": "Gameplay mechanics for ZeroEngine. Includes Interaction System, Tutorial System (sequences, steps), and Command Pattern (undo/redo).", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.persistence": "2.0.0" + }, + "keywords": [ + "zeroengine", + "interaction", + "tutorial", + "command" + ], + "author": { + "name": "ZeroGameStudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.gameplay" + } } diff --git a/com.zerogamestudio.zeroengine.input/package.json b/com.zerogamestudio.zeroengine.input/package.json index 4ae72df..9df097a 100644 --- a/com.zerogamestudio.zeroengine.input/package.json +++ b/com.zerogamestudio.zeroengine.input/package.json @@ -1,23 +1,29 @@ { - "name": "com.zerogamestudio.zeroengine.input", - "version": "2.0.0", - "displayName": "ZeroEngine.Input", - "description": "Input management for ZeroEngine. Wraps Unity Input System with device detection, rebinding, and context-aware input handling.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.unity.inputsystem": "1.7.0" - }, - "keywords": [ - "zeroengine", - "input", - "keyboard", - "gamepad", - "rebind" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.input", + "version": "2.0.0", + "displayName": "ZeroEngine.Input", + "description": "Input management for ZeroEngine. Wraps Unity Input System with device detection, rebinding, and context-aware input handling.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.unity.inputsystem": "1.7.0" + }, + "keywords": [ + "zeroengine", + "input", + "keyboard", + "gamepad", + "rebind" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.input" + } } diff --git a/com.zerogamestudio.zeroengine.localization/package.json b/com.zerogamestudio.zeroengine.localization/package.json index a4953bf..acc0549 100644 --- a/com.zerogamestudio.zeroengine.localization/package.json +++ b/com.zerogamestudio.zeroengine.localization/package.json @@ -1,14 +1,26 @@ { - "name": "com.zerogamestudio.zeroengine.localization", - "version": "2.0.0", - "displayName": "ZeroEngine.Localization", - "description": "Localization support for ZeroEngine. Multi-language text management and font switching.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.unity.localization": "1.4.0" - }, - "keywords": ["zeroengine", "localization", "i18n"], - "author": { "name": "ZeroGameStudio" } + "name": "com.zerogamestudio.zeroengine.localization", + "version": "2.0.0", + "displayName": "ZeroEngine.Localization", + "description": "Localization support for ZeroEngine. Multi-language text management and font switching.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.unity.localization": "1.4.0" + }, + "keywords": [ + "zeroengine", + "localization", + "i18n" + ], + "author": { + "name": "ZeroGameStudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.localization" + } } diff --git a/com.zerogamestudio.zeroengine.narrative/package.json b/com.zerogamestudio.zeroengine.narrative/package.json index ca48407..33bdf95 100644 --- a/com.zerogamestudio.zeroengine.narrative/package.json +++ b/com.zerogamestudio.zeroengine.narrative/package.json @@ -1,14 +1,27 @@ { - "name": "com.zerogamestudio.zeroengine.narrative", - "version": "2.0.0", - "displayName": "ZeroEngine.Narrative", - "description": "Narrative and content systems for ZeroEngine. Includes Dialog System (node graph, branching, conditions), Quest System (objectives, rewards), and Achievement System (counters, Steam integration).", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.persistence": "2.0.0" - }, - "keywords": ["zeroengine", "dialog", "quest", "achievement"], - "author": { "name": "ZeroGameStudio" } + "name": "com.zerogamestudio.zeroengine.narrative", + "version": "2.0.0", + "displayName": "ZeroEngine.Narrative", + "description": "Narrative and content systems for ZeroEngine. Includes Dialog System (node graph, branching, conditions), Quest System (objectives, rewards), and Achievement System (counters, Steam integration).", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.persistence": "2.0.0" + }, + "keywords": [ + "zeroengine", + "dialog", + "quest", + "achievement" + ], + "author": { + "name": "ZeroGameStudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.narrative" + } } diff --git a/com.zerogamestudio.zeroengine.network/package.json b/com.zerogamestudio.zeroengine.network/package.json index 8fcdb09..c57c870 100644 --- a/com.zerogamestudio.zeroengine.network/package.json +++ b/com.zerogamestudio.zeroengine.network/package.json @@ -1,13 +1,25 @@ { - "name": "com.zerogamestudio.zeroengine.network", - "version": "2.0.0", - "displayName": "ZeroEngine.Network", - "description": "Network synchronization for ZeroEngine. Wraps Netcode for GameObjects with reconnection handling.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0" - }, - "keywords": ["zeroengine", "network", "multiplayer"], - "author": { "name": "ZeroGameStudio" } + "name": "com.zerogamestudio.zeroengine.network", + "version": "2.0.0", + "displayName": "ZeroEngine.Network", + "description": "Network synchronization for ZeroEngine. Wraps Netcode for GameObjects with reconnection handling.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0" + }, + "keywords": [ + "zeroengine", + "network", + "multiplayer" + ], + "author": { + "name": "ZeroGameStudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.network" + } } diff --git a/com.zerogamestudio.zeroengine.pathfinding2d/package.json b/com.zerogamestudio.zeroengine.pathfinding2d/package.json index 12fb522..162027a 100644 --- a/com.zerogamestudio.zeroengine.pathfinding2d/package.json +++ b/com.zerogamestudio.zeroengine.pathfinding2d/package.json @@ -1,29 +1,30 @@ { - "name": "com.zerogamestudio.zeroengine.pathfinding2d", - "version": "1.6.19", - "displayName": "ZeroEngine.Pathfinding2D", - "description": "2D Platform pathfinding system for ZeroEngine. Provides platform graph generation, jump link calculation, and built-in A* pathfinding for platformer games.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "1.0.0" - }, - "keywords": [ - "zeroengine", - "pathfinding", - "2d", - "platformer", - "navigation", - "jump", - "astar" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - }, - "repository": { - "type": "git", - "url": "https://github.com/zerogamestudio/zeroengine.git", - "directory": "Packages/com.zerogamestudio.zeroengine.pathfinding2d" - } + "name": "com.zerogamestudio.zeroengine.pathfinding2d", + "version": "1.6.19", + "displayName": "ZeroEngine.Pathfinding2D", + "description": "2D Platform pathfinding system for ZeroEngine. Provides platform graph generation, jump link calculation, and built-in A* pathfinding for platformer games.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "1.0.0" + }, + "keywords": [ + "zeroengine", + "pathfinding", + "2d", + "platformer", + "navigation", + "jump", + "astar" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.pathfinding2d" + }, + "license": "MIT" } diff --git a/com.zerogamestudio.zeroengine.persistence/package.json b/com.zerogamestudio.zeroengine.persistence/package.json index ba3b8ec..cda017d 100644 --- a/com.zerogamestudio.zeroengine.persistence/package.json +++ b/com.zerogamestudio.zeroengine.persistence/package.json @@ -1,24 +1,30 @@ { - "name": "com.zerogamestudio.zeroengine.persistence", - "version": "2.0.0", - "displayName": "ZeroEngine.Persistence", - "description": "Persistence systems for ZeroEngine. Includes multi-slot Save System with screenshot support, ISaveable interface, and Settings System for audio/graphics/language preferences.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0" - }, - "keywords": [ - "zeroengine", - "save", - "load", - "persistence", - "settings", - "preferences", - "slot" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.persistence", + "version": "2.0.0", + "displayName": "ZeroEngine.Persistence", + "description": "Persistence systems for ZeroEngine. Includes multi-slot Save System with screenshot support, ISaveable interface, and Settings System for audio/graphics/language preferences.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0" + }, + "keywords": [ + "zeroengine", + "save", + "load", + "persistence", + "settings", + "preferences", + "slot" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.persistence" + } } diff --git a/com.zerogamestudio.zeroengine.pvp/package.json b/com.zerogamestudio.zeroengine.pvp/package.json index 425c3a8..ce766fe 100644 --- a/com.zerogamestudio.zeroengine.pvp/package.json +++ b/com.zerogamestudio.zeroengine.pvp/package.json @@ -1,24 +1,30 @@ { - "name": "com.zerogamestudio.zeroengine.pvp", - "version": "1.0.0", - "displayName": "ZeroEngine.PvP", - "description": "Asynchronous PvP framework with team snapshots, matchmaking, and ranking systems.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.autobattle": "1.0.0" - }, - "keywords": [ - "zeroengine", - "pvp", - "async", - "matchmaking", - "ranking", - "arena" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.pvp", + "version": "1.0.0", + "displayName": "ZeroEngine.PvP", + "description": "Asynchronous PvP framework with team snapshots, matchmaking, and ranking systems.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.autobattle": "1.0.0" + }, + "keywords": [ + "zeroengine", + "pvp", + "async", + "matchmaking", + "ranking", + "arena" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.pvp" + } } diff --git a/com.zerogamestudio.zeroengine.rpg/package.json b/com.zerogamestudio.zeroengine.rpg/package.json index 91e7bf6..3687cb5 100644 --- a/com.zerogamestudio.zeroengine.rpg/package.json +++ b/com.zerogamestudio.zeroengine.rpg/package.json @@ -1,28 +1,34 @@ { - "name": "com.zerogamestudio.zeroengine.rpg", - "version": "2.3.0", - "displayName": "ZeroEngine.RPG", - "description": "Turn-based RPG systems for ZeroEngine. Includes TurnBased framework (Speed/ATB/CTB/ActionPoint variants), Boost Points system (Octopath-style BP), and Shield Break system (weakness/shield mechanics).", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.data": "2.0.0", - "com.zerogamestudio.zeroengine.combat": "2.0.0" - }, - "keywords": [ - "zeroengine", - "rpg", - "turn-based", - "combat", - "boost", - "shield", - "octopath", - "atb", - "ctb" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.rpg", + "version": "2.3.0", + "displayName": "ZeroEngine.RPG", + "description": "Turn-based RPG systems for ZeroEngine. Includes TurnBased framework (Speed/ATB/CTB/ActionPoint variants), Boost Points system (Octopath-style BP), and Shield Break system (weakness/shield mechanics).", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.data": "2.0.0", + "com.zerogamestudio.zeroengine.combat": "2.0.0" + }, + "keywords": [ + "zeroengine", + "rpg", + "turn-based", + "combat", + "boost", + "shield", + "octopath", + "atb", + "ctb" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.rpg" + } } diff --git a/com.zerogamestudio.zeroengine.social/package.json b/com.zerogamestudio.zeroengine.social/package.json index 74de579..5c87988 100644 --- a/com.zerogamestudio.zeroengine.social/package.json +++ b/com.zerogamestudio.zeroengine.social/package.json @@ -1,14 +1,26 @@ { - "name": "com.zerogamestudio.zeroengine.social", - "version": "2.0.0", - "displayName": "ZeroEngine.Social", - "description": "Social systems for ZeroEngine. Includes Relationship System (affinity, gifts, levels) and Notification System (toasts, alerts, queues).", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.persistence": "2.0.0" - }, - "keywords": ["zeroengine", "relationship", "notification"], - "author": { "name": "ZeroGameStudio" } + "name": "com.zerogamestudio.zeroengine.social", + "version": "2.0.0", + "displayName": "ZeroEngine.Social", + "description": "Social systems for ZeroEngine. Includes Relationship System (affinity, gifts, levels) and Notification System (toasts, alerts, queues).", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.persistence": "2.0.0" + }, + "keywords": [ + "zeroengine", + "relationship", + "notification" + ], + "author": { + "name": "ZeroGameStudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.social" + } } diff --git a/com.zerogamestudio.zeroengine.ui/package.json b/com.zerogamestudio.zeroengine.ui/package.json index ccfa1e4..7981b96 100644 --- a/com.zerogamestudio.zeroengine.ui/package.json +++ b/com.zerogamestudio.zeroengine.ui/package.json @@ -1,27 +1,33 @@ { - "name": "com.zerogamestudio.zeroengine.ui", - "version": "2.0.0", - "displayName": "ZeroEngine.UI", - "description": "Industrial-grade UI framework for ZeroEngine. Includes UIManager (layers, stacks, masks), UIViewBase (lifecycle, animations, focus), and optional MVVM framework.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.unity.textmeshpro": "3.0.6" - }, - "keywords": [ - "zeroengine", - "ui", - "panel", - "view", - "mvvm", - "layer", - "toast", - "notification", - "alert" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - } + "name": "com.zerogamestudio.zeroengine.ui", + "version": "2.0.0", + "displayName": "ZeroEngine.UI", + "description": "Industrial-grade UI framework for ZeroEngine. Includes UIManager (layers, stacks, masks), UIViewBase (lifecycle, animations, focus), and optional MVVM framework.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.unity.textmeshpro": "3.0.6" + }, + "keywords": [ + "zeroengine", + "ui", + "panel", + "view", + "mvvm", + "layer", + "toast", + "notification", + "alert" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.ui" + } } diff --git a/com.zerogamestudio.zeroengine.world/package.json b/com.zerogamestudio.zeroengine.world/package.json index 5bfc91b..b83036d 100644 --- a/com.zerogamestudio.zeroengine.world/package.json +++ b/com.zerogamestudio.zeroengine.world/package.json @@ -1,14 +1,28 @@ { - "name": "com.zerogamestudio.zeroengine.world", - "version": "2.0.0", - "displayName": "ZeroEngine.World", - "description": "World and environment systems for ZeroEngine. Includes Environment System (weather, day-night cycle), Calendar System (game time, seasons), and Minimap System (markers, fog of war).", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.zerogamestudio.zeroengine.core": "2.0.0", - "com.zerogamestudio.zeroengine.persistence": "2.0.0" - }, - "keywords": ["zeroengine", "environment", "weather", "calendar", "minimap"], - "author": { "name": "ZeroGameStudio" } + "name": "com.zerogamestudio.zeroengine.world", + "version": "2.0.0", + "displayName": "ZeroEngine.World", + "description": "World and environment systems for ZeroEngine. Includes Environment System (weather, day-night cycle), Calendar System (game time, seasons), and Minimap System (markers, fog of war).", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.zerogamestudio.zeroengine.core": "2.0.0", + "com.zerogamestudio.zeroengine.persistence": "2.0.0" + }, + "keywords": [ + "zeroengine", + "environment", + "weather", + "calendar", + "minimap" + ], + "author": { + "name": "ZeroGameStudio" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine.world" + } } diff --git a/com.zerogamestudio.zeroengine/package.json b/com.zerogamestudio.zeroengine/package.json index e9855c9..2ec8e40 100644 --- a/com.zerogamestudio.zeroengine/package.json +++ b/com.zerogamestudio.zeroengine/package.json @@ -1,71 +1,73 @@ { - "name": "com.zerogamestudio.zeroengine", - "version": "1.17.0", - "displayName": "ZeroEngine", - "description": "Modular Unity game development framework with AI System (UtilityAI/GOAP/NPCSchedule), Combat System, Projectile, Spawner, StatSystem, BuffSystem, AbilitySystem, UI Framework, ModSystem, Achievement, Crafting, Relationship, Loot Tables, Calendar, Notification, Settings, Environment (Weather/DayNight), Minimap, Interaction System, Tutorial System, and more.", - "unity": "2022.3", - "unityRelease": "0f1", - "dependencies": { - "com.unity.inputsystem": "1.7.0", - "com.unity.localization": "1.4.0", - "com.unity.addressables": "1.21.0", - "com.unity.textmeshpro": "3.0.6", - "com.zerogamestudio.zeroengine.dashboard": "1.0.0" + "name": "com.zerogamestudio.zeroengine", + "version": "1.17.0", + "displayName": "ZeroEngine", + "description": "Modular Unity game development framework with AI System (UtilityAI/GOAP/NPCSchedule), Combat System, Projectile, Spawner, StatSystem, BuffSystem, AbilitySystem, UI Framework, ModSystem, Achievement, Crafting, Relationship, Loot Tables, Calendar, Notification, Settings, Environment (Weather/DayNight), Minimap, Interaction System, Tutorial System, and more.", + "unity": "2022.3", + "unityRelease": "0f1", + "dependencies": { + "com.unity.inputsystem": "1.7.0", + "com.unity.localization": "1.4.0", + "com.unity.addressables": "1.21.0", + "com.unity.textmeshpro": "3.0.6", + "com.zerogamestudio.zeroengine.dashboard": "1.0.0" + }, + "keywords": [ + "game", + "framework", + "ai", + "utility-ai", + "goap", + "npc-schedule", + "behavior", + "combat", + "damage", + "health", + "targeting", + "projectile", + "spawner", + "stat", + "buff", + "ability", + "inventory", + "quest", + "mod", + "rpg", + "ui", + "loot", + "achievement", + "crafting", + "relationship", + "calendar", + "notification", + "settings", + "environment", + "weather", + "daynight", + "minimap", + "interaction", + "tutorial" + ], + "author": { + "name": "ZeroGameStudio", + "url": "https://github.com/zerogamestudio" + }, + "repository": { + "type": "git", + "url": "https://github.com/liuzqk/zeroengine.git", + "directory": "com.zerogamestudio.zeroengine" + }, + "samples": [ + { + "displayName": "Basic Examples", + "description": "Basic usage examples for ZeroEngine modules", + "path": "Samples~/Basic" }, - "keywords": [ - "game", - "framework", - "ai", - "utility-ai", - "goap", - "npc-schedule", - "behavior", - "combat", - "damage", - "health", - "targeting", - "projectile", - "spawner", - "stat", - "buff", - "ability", - "inventory", - "quest", - "mod", - "rpg", - "ui", - "loot", - "achievement", - "crafting", - "relationship", - "calendar", - "notification", - "settings", - "environment", - "weather", - "daynight", - "minimap", - "interaction", - "tutorial" - ], - "author": { - "name": "ZeroGameStudio", - "url": "https://github.com/zerogamestudio" - }, - "repository": { - "type": "git", - "url": "https://github.com/zerogamestudio/zeroengine.git" - }, - "samples": [ - { - "displayName": "Basic Examples", - "description": "Basic usage examples for ZeroEngine modules", - "path": "Samples~/Basic" - }, - { - "displayName": "Game Systems (v1.11.0)", - "description": "Advanced examples for Loot Table, Achievement, Crafting, and Relationship systems", - "path": "Samples~/GameSystems" - } - ] -} \ No newline at end of file + { + "displayName": "Game Systems (v1.11.0)", + "description": "Advanced examples for Loot Table, Achievement, Crafting, and Relationship systems", + "path": "Samples~/GameSystems" + } + ], + "license": "MIT" +} diff --git a/docs/openai-oss-application-notes.md b/docs/openai-oss-application-notes.md new file mode 100644 index 0000000..25fc1c6 --- /dev/null +++ b/docs/openai-oss-application-notes.md @@ -0,0 +1,41 @@ +# OpenAI OSS Application Notes + +## Project + +ZeroEngine is a public Unity package repository maintained by ZeroGameStudio. +It provides reusable systems for Unity game production, including core +infrastructure, data tooling, 2D platform navigation, UI, narrative, persistence, +and analytics packages. + +## Maintainer Role + +The maintainer owns package design, release decisions, issue triage, CI, and +downstream integration into production Unity projects. + +## Current Evidence + +- The repository is public at `https://github.com/liuzqk/zeroengine`. +- Packages are distributed as Unity Package Manager Git dependencies. +- POB depends on multiple packages from this repository in production. +- The repository includes Unity EditMode tests and a GameCI workflow. +- The project now has root documentation, MIT licensing, support guidance, + security guidance, and contribution guidelines. + +## Codex Usage Case + +API credits and Codex access would be used for: + +- Reviewing pull requests across many Unity packages. +- Generating and maintaining focused EditMode regression tests. +- Auditing package metadata and installability. +- Maintaining documentation and examples for Unity package consumers. +- Investigating cross-package compatibility when Unity versions or package + dependencies change. + +## Caveats To State Honestly + +- Public star and fork counts are currently low. +- Public adoption evidence is early; POB is the strongest current downstream + usage proof. +- The project should avoid claiming broad ecosystem adoption until there is + public evidence beyond maintainer-owned downstream projects. diff --git a/docs/oss-graduation-spec.md b/docs/oss-graduation-spec.md new file mode 100644 index 0000000..99ee432 --- /dev/null +++ b/docs/oss-graduation-spec.md @@ -0,0 +1,43 @@ +# ZeroEngine OSS Graduation Spec + +## Goal + +Make ZeroEngine credible as a public open-source Unity package repository and +as the primary project for an OSS support application. + +## Graduation Criteria + +- The root repository explains what ZeroEngine is, why it exists, what packages + matter first, and how to install them. +- The repository declares the MIT License. +- External contributors can find contribution, support, and security paths. +- GitHub issues and pull requests collect enough information for maintainers to + reproduce and review work. +- Important packages have valid UPM metadata: license, author, repository URL, + and repository directory. +- At least the high-signal packages have README files with install and usage + guidance. +- CI presence is documented so reviewers can see how tests are intended to run. + +## Primary Packages For Reviewers + +- `com.zerogamestudio.zeroengine.core` +- `com.zerogamestudio.zeroengine.data-toolkit` +- `com.zerogamestudio.zeroengine.pathfinding2d` +- `com.zerogamestudio.zeroengine.narrative` +- `com.zerogamestudio.zeroengine.ui` +- `com.zerogamestudio.analytics` + +## Non-goals + +- Do not rewrite runtime APIs as part of graduation. +- Do not claim broad ecosystem adoption until there is public evidence. +- Do not convert every package README into full reference documentation in the + first pass. + +## Verification + +- All package manifests parse as JSON. +- Package metadata scan reports license and repository data for public packages. +- Markdown entry files exist at the root and for primary packages. +- GitHub templates exist for issues and pull requests.