Namespace Serenity.Editor.AnimationHub.Window
Classes
AnimationHubAuthoringActions
The Animation Hub window's authoring controller: turns a row action press into a
ModelAnimatorCreator call, logs the outcome to the window's
Serenity.Global.Infrastructure.Editor.SerenityWizardActivityLog, and triggers a rescan so the tree reflects the change. Owns
the transient row-level UI state authoring needs — the inline Add-State/Rename prompt, and the pending
UnityEditor.EditorGUIUtility.ShowObjectPicker``1(UnityEngine.Object,System.Boolean,System.String,System.Int32) clip request — so AnimationHubUnityTabGui
stays pure rendering and AnimationHubWindow stays a thin host. Recreated (not serialized)
every OnEnable, the same lifetime as the window's _expandedRowKeys set.
AnimationHubAuthoringPromptGui
Draws every inline "prompt" row AnimationHubUnityTabGui can open under a row — Add/Rename State and Rename Parameter's plain name field, Add Parameter's name-plus-type-popup, Add Transition's source/destination/condition popup strip, and Set Weight's float field. Split out of AnimationHubUnityTabGui once the tree-rendering file and its prompt rendering together pushed past the ~600-line size guidance — a prompt's own field widgets are one responsibility, which row state and validator findings it renders alongside is another. Every method here is driven purely by an Prompt row-key match, exactly like the tab file's own foldable/leaf row drawing, so which one (if any) renders is decided the same way on both sides of the split.
AnimationHubAuthoringPromptState
Which row's inline prompt (Add/Rename State, Add/Rename Parameter, Add Transition, Set Layer Weight) is
open, and its buffered field values. At most one prompt is open at a time — opening a second replaces
the first, an accepted simplification for this phase's inline-field authoring (no modal text-entry
dialog exists in this codebase to reuse instead). A single shared state (rather than one class per
prompt shape) keeps that "at most one" rule enforced by construction; OpenForRowKey is
given a prompt-specific derived key (not the bare row key) whenever a row can open more than one kind of
prompt — see AnimationHubUnityTabGui's "+ Transition"/"Set Weight" row for why.
AnimationHubIssueIndex
Pure lookup built once per scan from ModelAnimationValidator's findings: the worst severity anywhere in a row's own subtree, and the row's own findings. Kept out of AnimationHubUnityTabGui so the severity dot, the "issues only" filter and the expanded message list all read the same lookup instead of drifting apart into three copies of it.
AnimationHubProceduralTabGui
Renders the "Procedural Animator" tab from a scanned ProceduralInventory: the in-hub simulator, a Components summary row, the assigned profile (or an "Open Setup Wizard" prompt when there is none), and — once a profile is assigned — its Rules, Layers, Actions and State Keys, each row expandable into the real asset inspector via Serenity.Global.Infrastructure.Editor.SerenityEmbeddedInspectorGui. Severity dots and the "issues only" filter read the same AnimationHubIssueIndex plumbing as AnimationHubUnityTabGui.
AnimationHubRowFormatting
Pure string formatting for Animation Hub rows: row titles, motion summaries and the search-match test.
Kept free of UnityEditor/UnityEngine so it is unit-testable without an
EditorWindow — the tab and row GUI classes call into this rather than formatting inline.
AnimationHubRowGui
Small adapter over Serenity.Global.Infrastructure.Editor.SerenityListRowGui for the Animation Hub's tree rows: adds a depth indent, a severity dot, a Ping action, and — since the authoring phase — an optional trailing strip of caller-owned actions. The tab GUI never talks to Serenity.Global.Infrastructure.Editor.SerenityListRowGui directly, so its own action list stays a plain label/tooltip/enabled triple without touching row layout.
AnimationHubUnityTabGui
Renders the "Unity Animation" tab from a scanned UnityAnimationInventory: one indented tree per AnimatorEntry (parameters, layers, states, transitions), followed by a flat "Clips on this model" section. Every row's Ping action stays read-only; the authoring actions added on top of it (Create Controller, + State, Default/Rename/Delete/Clip…) all route through Actions — this file only decides which action shows on which row and reads back which one was pressed, it never touches an asset itself. A row with a ModelAnimationValidator finding also carries a severity dot and, once expanded, the finding's own message.
AnimationHubWindow
Model-centric Animation Hub: pick one prefab — or a scene instance that resolves to one — scan its Unity
Animator/clip setup and its Procedural Animator setup via ModelAnimationScanner, and
browse both read-only against ModelAnimationValidator's findings, with inline editing of
Procedural Animator assets via Serenity.Global.Infrastructure.Editor.SerenityEmbeddedInspectorGui. Mirrors
SerenityAssetTypeBrowserWindow's shape (toolbar, scan-on-demand, empty state, ping-only rows).
Structs
AnimationHubAuthoringContext
Everything AnimationHubUnityTabGui needs to gate and label an authoring row action: which model is being authored, whether it can be, and where to send the resulting engine call.
AnimationHubRowGui.Result
What happened to a drawn row this pass.
ProceduralTabContext
Everything AnimationHubProceduralTabGui needs beyond the scanned inventory and the row-filtering plumbing it already shares with AnimationHubUnityTabGui: the window's single embedded-inspector cache, its single Procedural Animator simulator and the model it previews, and the callback that opens the setup wizard — grouped the same way AnimationHubAuthoringContext groups the Unity tab's own window-provided singletons.