CrimsonInspector

CrimsonInspector lets any UObject describe itself to any consumer without either side knowing the other. A provider implements ICrimsonInspectable and fills a bag of FInstancedStruct payloads; a consumer (a tooltip, an AI context builder, a search index, a comparison panel) reads only the struct types it understands and skips the rest. A new kind of data never means editing a shared struct.

What's included

SystemKey typesPurpose
Provider contractICrimsonInspectable (ProvideInspectorData)Implemented by anything that wants to be inspected
Vocabulary payloadsFCrimsonInspectorDisplayName, FCrimsonInspectorIcon, FCrimsonInspectorStatLine, FCrimsonInspectorTextLine, FCrimsonInspectorSectionHeaderCommon data every consumer can render
HelpersUCrimsonInspectorStaticsBuild payloads (AddEntry, AddStatLine, ...) and read them (GetInspectorData, GetStatLines, TryGetDisplayName, ...)
Request categoriesCrimsonInspectorTags::Request_*Let a consumer ask for only identity, stats, description or tags

Plugin dependencies

GroupDependencies
Crimson pluginsNone - fully standalone
Engine modules (runtime)Core, CoreUObject, GameplayTags (public); Engine (private). FInstancedStruct comes from the engine's StructUtils.
Engine modules (editor)Core, CoreUObject, Engine, GameplayTags, SlateCore, Slate, ApplicationCore, ToolMenus, UnrealEd, Kismet
Which path do I choose?
Showing data about an object? Start with Quick Start. Emitting data no built-in struct covers? How-To: Emit Your Own Payload Types. Building an expensive provider? How-To: Request Only What You Need.
Using with other Crimson plugins
CrimsonInspector works on its own and needs no integration layer: CrimsonCore ships no wiring for it. Any system, from any plugin, becomes a provider by implementing ICrimsonInspectable, and any consumer reads the payload bag through UCrimsonInspectorStatics. To connect it to other plugins you own, read CrimsonCommon -> Concept: Connecting Crimson Plugins.