|
| 1 | +# AGENTS GUIDE — Assets/AirConsole Focus |
| 2 | + |
| 3 | +The `airconsole-unity-plugin` project targets Unity 2022.3.x and ships the full AirConsole runtime, editor tooling, Android TV helpers, and WebGL controller templates. This guide is tailored to the contents under `Assets/AirConsole`. |
| 4 | + |
| 5 | +## What Lives in Assets/AirConsole |
| 6 | + |
| 7 | +- `scripts/Runtime`: Core API surface (`AirConsole.cs`), websocket/webview bridges (`WebsocketListener.cs`, `WebViewManager.cs`), runtime settings (`Settings.cs`, `AirconsoleRuntimeSettings.cs`, `NativeGameSizingSettings.cs`), logging (`AirConsoleLogger.cs`, `DebugLevel.cs`), platform runtime configurators, and Android plugin wrappers under `Runtime/Plugin/Android`. |
| 8 | +- `scripts/Editor`: Custom inspectors/windows (`Inspector.cs`, `SettingWindow.cs`, `PlayMode.cs`, `SafeAreaTester.cs`, `WebListener.cs`), build automation (`BuildAutomation/*`), project maintenance checks (`ProjectMaintenance/*`), and plugin developer helpers (`PluginDevelopment/*`). |
| 9 | +- `scripts/SupportCheck`: Unity version/platform validator ASMDEF used in-editor. |
| 10 | +- `scripts/Tests`: ASMDEF-scoped EditMode, PlayMode, and Editor tests. |
| 11 | +- `examples`: Sample scenes (`basic`, `pong`, `platformer`, `swipe`, `game-states`, `safe-area`, `translations`) for manual validation. |
| 12 | +- `extras`: Controller template HTML and `HighScoreHelper.cs`. |
| 13 | +- `plugins`: Managed dependencies (`Newtonsoft.Json.dll`, `websocket-sharp.dll`) plus Android native plugin payload under `plugins/Android`. |
| 14 | +- `unity-webview`: Embedded WebView plugin with runtime/editor asmdefs and native binaries under `Plugins`. |
| 15 | +- `unity-webview` is an imported external dependency. You are not allowed to alter it. |
| 16 | +- Docs and misc: `Documentation_1.7.pdf`, `Documentation for AndroidTV.pdf`, `Upgrade_Plugin_Version.md`, `README.txt`, `airconsole.prefs`, and the distributable `airconsole-code.unitypackage`. |
| 17 | + |
| 18 | +## Runtime Essentials |
| 19 | + |
| 20 | +- **API + bridge**: `AirConsole.cs` exposes the public API; `WebsocketListener` routes JSON actions/events; `WebViewManager` coordinates the embedded webview. Add new events in both the listener and the API surface. |
| 21 | +- **Config assets**: `AirconsoleRuntimeSettings.asset` and `NativeGameSizingSettings.asset` (in `scripts/Runtime/Resources`) hold defaults for ports, safe-area sizing, etc. Adjust via the editor UI instead of hardcoding. |
| 22 | +- **Platform setup**: Implementations of `IRuntimeConfigurator` (`AndroidRuntimeConfigurator`, `WebGLRuntimeConfigurator`, `EditorRuntimeConfigurator`) handle platform-specific initialization. Extend these rather than branching deep in the API. |
| 23 | +- **Android plugin wrappers**: `PluginManager`, `AndroidUnityUtils`, and callback helpers (`UnityPluginExecutionCallback`, `UnityPluginStringCallback`, `GenericUnityPluginCallback`, `UnityAndroidObjectProvider`) encapsulate Java bridge calls. Keep new native hooks consistent with these wrappers. |
| 24 | +- **Logging & diagnostics**: Use `AirConsoleLogger` with `DebugLevel` enums to respect runtime debug settings. |
| 25 | + |
| 26 | +## Editor & Build Tooling |
| 27 | + |
| 28 | +- **UI/inspectors**: `SettingWindow`, `Inspector`, `PlayMode`, `SafeAreaTester`, and `WebListener` provide editor UI and simulator hooks. Prefer extending these instead of adding ad-hoc windows. |
| 29 | +- **Build automation** (`scripts/Editor/BuildAutomation`): |
| 30 | + - `PreBuildProcessing` and `PostBuildProcess` wrap pre/post hooks; post steps validate WebGL template AirConsole JS versions. |
| 31 | + - `AndroidManifestProcessor`, `AndroidGradleProcessor`, `AndroidProjectProcessor`, `AndroidManifest`, and `AndroidXMLDocument` mutate generated Android projects/manifests. Use these helpers instead of manual IO. |
| 32 | +- **Project maintenance** (`ProjectMaintenance`): `ProjectDependencyCheck`, `SemVerCheck`, and `ProjectConfigurationCheck` enforce Unity version and project settings; `ProjectPreferenceManager/ProjectPreferences` manage stored preferences; `ProjectUpgradeEditor` supports upgrade flows. |
| 33 | +- **Plugin development helpers** (`PluginDevelopment`): `BuildHelper` hosts build/packaging entry points (Web/Android) and can auto-zip or auto-commit; `DevelopmentTools` includes additional packager utilities. |
| 34 | + |
| 35 | +## Tests, Samples, Validation |
| 36 | + |
| 37 | +- Tests live under `scripts/Tests` (EditMode/PlayMode/Editor asmdefs). Run via Unity Test Runner; some PlayMode tests expect Android as the active build target. |
| 38 | +- Manual checks: leverage sample scenes in `examples` to verify controller flows, safe-area behavior, translations, and Android TV input. |
| 39 | +- WebGL validation: keep `PostBuildProcess` version checks aligned with the AirConsole JS used in `Assets/WebGLTemplates/AirConsole-*`. |
| 40 | + |
| 41 | +## Dependencies & Third-Party |
| 42 | + |
| 43 | +- Managed DLLs: `Newtonsoft.Json.dll` and `websocket-sharp.dll` are under `plugins/` and referenced by runtime asmdefs. |
| 44 | +- Embedded webview: `unity-webview` includes runtime/editor code plus native libs under `unity-webview/Plugins`. |
| 45 | +- Android native pieces are under `plugins/Android`; ensure gradle/manifest processors remain compatible when updating them. |
| 46 | + |
| 47 | +## Common Workflows |
| 48 | + |
| 49 | +- **Add/extend an API event**: Update `WebsocketListener` to parse/route the action, expose it in `AirConsole`, and wire through logging; add tests where possible. |
| 50 | +- **Adjust runtime defaults**: Modify `AirconsoleRuntimeSettings.asset` or `NativeGameSizingSettings.asset` (via editor windows). Avoid hardcoded constants in code. |
| 51 | +- **Android manifest/Gradle edits**: Implement changes in `AndroidManifestProcessor`/`AndroidGradleProcessor`/`AndroidProjectProcessor`; ensure `useCustomMainManifest` stays enabled. |
| 52 | +- **WebGL template/JS version bumps**: Update constants/regex in `PostBuildProcess`, refresh `Settings.RequiredMinimumVersion` if needed, and sync HTML in `Assets/WebGLTemplates/AirConsole-*`. |
| 53 | +- **Packaging/exports**: Use `BuildHelper.BuildWeb()`, `BuildHelper.BuildAndroid()`, or `BuildHelper.BuildAndroidInternal()`; they run configuration checks and can zip outputs. |
| 54 | + |
| 55 | +## Guardrails & Gotchas |
| 56 | + |
| 57 | +- Conditional compilation is heavily used: `#if !DISABLE_AIRCONSOLE`, `UNITY_ANDROID`, `UNITY_EDITOR`, `UNITY_WEBGL`. Keep new code behind appropriate defines and asmdefs. |
| 58 | +- Respect asmdef boundaries (`AirConsole.Runtime`, `AirConsole.Editor`, `AirConsole.SupportCheck`, `AirConsole.Examples`, `unity-webview`); place new files in matching folders. |
| 59 | +- Embedded websocket/webview server underpins editor play; avoid breaking `WebsocketListener`/`WebViewManager` interactions (ports come from runtime settings). |
| 60 | +- Safe-area handling is central for Android TV/Automotive—maintain `OnSafeAreaChanged` flows and avoid state changes before safe-area readiness. |
| 61 | +- Build helper may auto-commit with `build: TIMESTAMP` when uncommitted changes exist; be mindful when running locally. |
| 62 | + |
| 63 | +## Event Queue Architecture (Thread-Safe Callbacks) |
| 64 | + |
| 65 | +The WebView plugin uses a thread-safe event queue to handle callbacks from native code (Android only at this point): |
| 66 | + |
| 67 | +### Event Processing Lifecycle |
| 68 | + |
| 69 | +Events are processed at multiple points to ensure timely delivery: |
| 70 | + |
| 71 | +1. **`Update()`**: Primary drain point (every frame) |
| 72 | +2. **`LateUpdate()`**: Secondary drain (end of frame) |
| 73 | +3. **`FixedUpdate()`**: Tertiary drain (physics frame / fixed timestep / before rendering) |
| 74 | +4. **`OnApplicationPause(false)`**: Flush on resume |
| 75 | +5. **`OnDisable()`**: Flush before component teardown |
| 76 | +6. **`OnApplicationQuit()`**: Final flush before app exit |
| 77 | + |
| 78 | +## Additional References |
| 79 | + |
| 80 | +- `Documentation_1.7.pdf` (setup/examples), `Documentation for AndroidTV.pdf`, and `Upgrade_Plugin_Version.md` for upgrade flows. |
| 81 | +- Controller HTML template: `extras/controller-template.html`. |
| 82 | +- Quick intro: `Assets/AirConsole/README.txt`; preferences file `airconsole.prefs`. |
0 commit comments