Refactor Gameplay Tags: Split DT_ProjectTags.csv into 11 per-category Data Tables

- Removed DT_ProjectTags.csv and migrated tags into separate Data Tables:
  - DT_Tags_Player.csv (35 tags)
  - DT_Tags_Interaction.csv (37 tags)
  - DT_Tags_Item.csv (28 tags)
  - DT_Tags_Narrative.csv (55 tags)
  - DT_Tags_AI.csv (24 tags)
  - DT_Tags_Save.csv (25 tags)
  - DT_Tags_Environment.csv (35 tags)
  - DT_Tags_Combat.csv (28 tags)
  - DT_Tags_State.csv (43 tags)
  - DT_Tags_Audio.csv (29 tags)
  - DT_Tags_Achievement.csv (22 tags)

- Updated INDEX.md to reflect new structure and deprecated DT_ProjectTags.csv.
- Enhanced documentation in 01-core-foundation.md regarding tag-driven architecture.
This commit is contained in:
Lefteris Notas
2026-05-19 19:20:40 +03:00
parent bec6cb715e
commit 209f24a0f8
17 changed files with 491 additions and 176 deletions

View File

@@ -14,12 +14,12 @@ This document catalogs all UE5 engine functions that are C++ only (not exposed t
**UE5 Node:** Does NOT exist in Blueprint
**Files Affected:** `01_GI_GameTagRegistry.md`, any system that needs to enumerate all tags
**Blueprint Workaround — Data Table Proxy:**
**Blueprint Workaround — Data Table Proxy (Multi-Table):**
1. Create a Data Table: `DT_ProjectTags` with Row Structure = `GameplayTagTableRow`
2. Populate it with all framework tags (mirrors `DefaultGameplayTags.ini`)
3. Register in Project Settings → GameplayTags → Gameplay Tag Table List
4. In Blueprint: use `Get Data Table Row Names``ForEachLoop``Get Data Table Row` → extract `Tag` field
1. Create 11 per-category Data Tables with Row Structure = `GameplayTagTableRow` (see `docs/blueprints/01-core/data-tables/`)
2. Populate each with its category's tags (mirrors `DefaultGameplayTags.ini`)
3. Register ALL tables in `Project Settings → GameplayTags → Gameplay Tag Table List`
4. In Blueprint: use outer `ForEachLoop` over `Array<Data Table>` + inner `ForEachLoop` over `Get Data Table Row Names``Get Data Table Row` → extract `Tag` field
5. This provides a complete tag list without C++
**Trade-off:** Manual maintenance. Adding new tags requires updating both the `.ini` file AND the Data Table. Mitigation: use `ExportTagNamespace()` to audit for discrepancies.
@@ -176,7 +176,7 @@ OR create a Blueprint Macro Library with a macro that wraps the subsystem lookup
When writing or updating Blueprint spec files, follow these rules to avoid C++-only references:
1. **Never reference `UGameplayTagsManager::Get()`** — use `Get Tag Display Name`, `Is Gameplay Tag Valid`, `Make Literal Gameplay Tag`.
2. **Never reference `Get All Gameplay Tags`** — use the Data Table proxy pattern (`DT_ProjectTags``Get Data Table Row Names`).
2. **Never reference `Get All Gameplay Tags`** — use the multi-table Data Table proxy pattern (Array<Data Table> → nested `ForEachLoop``Get Data Table Row`).
3. **Never use `FPrimaryAssetId` as a type name** — use `Primary Asset Id` (Blueprint type).
4. **Never use `TSoftObjectPtr` as a type name** — use `Soft Object Reference` (Blueprint type).
5. **Never put logic in Data Assets** — move initialization/validation to GameInstance, Subsystem, or Editor Utility.