From faee2cde95abc728927ce18dc5bd6aeb8eb0abbd Mon Sep 17 00:00:00 2001 From: vickydotbat Date: Sun, 21 Jun 2026 07:40:46 +0000 Subject: [PATCH] fix failing checks + cosmetic renames (#13) Reviewed-on: https://git.westgate.pw/ShadowsOverWestgate/sow-tools/pulls/13 Co-authored-by: vickydotbat Co-committed-by: vickydotbat --- internal/pipeline/pipeline_test.go | 12 +-- internal/project/project.go | 43 ++++++----- internal/project/project_test.go | 20 ++--- internal/topdata/autogen.go | 116 ++++++++++++++--------------- internal/topdata/topdata_test.go | 16 ++-- 5 files changed, 106 insertions(+), 101 deletions(-) diff --git a/internal/pipeline/pipeline_test.go b/internal/pipeline/pipeline_test.go index a9c28d7..3ca8c0a 100644 --- a/internal/pipeline/pipeline_test.go +++ b/internal/pipeline/pipeline_test.go @@ -1893,7 +1893,7 @@ func TestPlanHAKsWritesManifestWithoutArchives(t *testing.T) { } } -func TestBuildHAKsWritesConfiguredHeadVisualeffectsAutogenManifest(t *testing.T) { +func TestBuildHAKsWritesConfiguredAccessoryVisualeffectsAutogenManifest(t *testing.T) { root := t.TempDir() mustMkdir(t, filepath.Join(root, "src")) mustMkdir(t, filepath.Join(root, "assets", "vfxs", "chest_accessories")) @@ -1980,7 +1980,7 @@ func TestBuildHAKsWritesConfiguredHeadVisualeffectsAutogenManifest(t *testing.T) headRaw, err := os.ReadFile(filepath.Join(root, "build", "sow-accessory-vfx-manifest.json")) if err != nil { - t.Fatalf("read head visualeffects manifest: %v", err) + t.Fatalf("read accessory visualeffects manifest: %v", err) } text := string(headRaw) for _, want := range []string{ @@ -1998,12 +1998,12 @@ func TestBuildHAKsWritesConfiguredHeadVisualeffectsAutogenManifest(t *testing.T) `"model_stem": "hfx_hair_bangs"`, } { if !strings.Contains(text, want) { - t.Fatalf("expected head visualeffects manifest to contain %q, got:\n%s", want, text) + t.Fatalf("expected accessory visualeffects manifest to contain %q, got:\n%s", want, text) } } } -func TestBuildHAKsWritesFolderCategoryInHeadVisualeffectsAutogenManifest(t *testing.T) { +func TestBuildHAKsWritesFolderCategoryInAccessoryVisualeffectsAutogenManifest(t *testing.T) { root := t.TempDir() mustMkdir(t, filepath.Join(root, "src")) mustMkdir(t, filepath.Join(root, "assets", "vfxs", "head_features", "sinfar", "ears_plt")) @@ -2082,7 +2082,7 @@ func TestBuildHAKsWritesFolderCategoryInHeadVisualeffectsAutogenManifest(t *test } headRaw, err := os.ReadFile(filepath.Join(root, "build", "sow-accessory-vfx-manifest.json")) if err != nil { - t.Fatalf("read head visualeffects manifest: %v", err) + t.Fatalf("read accessory visualeffects manifest: %v", err) } text := string(headRaw) for _, want := range []string{ @@ -2095,7 +2095,7 @@ func TestBuildHAKsWritesFolderCategoryInHeadVisualeffectsAutogenManifest(t *test `"category_from": "immediate_parent"`, } { if !strings.Contains(text, want) { - t.Fatalf("expected head visualeffects manifest to contain %q, got:\n%s", want, text) + t.Fatalf("expected accessory visualeffects manifest to contain %q, got:\n%s", want, text) } } } diff --git a/internal/project/project.go b/internal/project/project.go index a206182..9aaccec 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -349,7 +349,7 @@ type AutogenProducerConfig struct { Include []string `json:"include" yaml:"include"` Derive AutogenDeriveConfig `json:"derive" yaml:"derive"` Manifest AutogenManifestConfig `json:"manifest" yaml:"manifest"` - HeadVisualeffects HeadVisualeffectsConfig `json:"accessory_visualeffects" yaml:"accessory_visualeffects"` + AccessoryVisualeffects AccessoryVisualeffectsConfig `json:"accessory_visualeffects" yaml:"accessory_visualeffects"` } type AutogenConsumerConfig struct { @@ -362,14 +362,14 @@ type AutogenConsumerConfig struct { Include []string `json:"include" yaml:"include"` Derive AutogenDeriveConfig `json:"derive" yaml:"derive"` PartsRows PartsRowsConfig `json:"parts_rows" yaml:"parts_rows"` - HeadVisualeffects HeadVisualeffectsConfig `json:"accessory_visualeffects" yaml:"accessory_visualeffects"` + AccessoryVisualeffects AccessoryVisualeffectsConfig `json:"accessory_visualeffects" yaml:"accessory_visualeffects"` Manifest AutogenManifestConfig `json:"manifest" yaml:"manifest"` LocalOverrideRoot string `json:"local_override_root,omitempty" yaml:"local_override_root,omitempty"` ManifestFile string `json:"manifest_file,omitempty" yaml:"manifest_file,omitempty"` } -type HeadVisualeffectsConfig struct { - Groups map[string]HeadVisualeffectGroupConfig `json:"groups,omitempty" yaml:"groups"` +type AccessoryVisualeffectsConfig struct { + Groups map[string]AccessoryVisualeffectGroupConfig `json:"groups,omitempty" yaml:"groups"` GroupTokenSource string `json:"group_token_source,omitempty" yaml:"group_token_source"` CategoryFrom string `json:"category_from,omitempty" yaml:"category_from"` Delimiter string `json:"delimiter,omitempty" yaml:"delimiter"` @@ -381,7 +381,7 @@ type HeadVisualeffectsConfig struct { RowDefaults map[string]string `json:"row_defaults,omitempty" yaml:"row_defaults"` } -type HeadVisualeffectGroupConfig struct { +type AccessoryVisualeffectGroupConfig struct { Prefix string `json:"prefix" yaml:"prefix"` ModelColumn string `json:"model_column,omitempty" yaml:"model_column"` ModelColumns []string `json:"model_columns,omitempty" yaml:"model_columns"` @@ -1626,8 +1626,8 @@ func validateAutogenConfig(cfg AutogenConfig) []error { failures = append(failures, validateGlobList(fieldPrefix+".include", producer.Include)...) failures = append(failures, validateAutogenDeriveConfig(fieldPrefix+".derive", producer.Derive)...) failures = append(failures, validateAutogenManifestConfig(fieldPrefix+".manifest", producer.Manifest)...) - if headVisualeffectsConfigConfigured(producer.HeadVisualeffects) { - failures = append(failures, validateHeadVisualeffectsConfig(fieldPrefix+".accessory_visualeffects", producer.HeadVisualeffects)...) + if accessoryVisualeffectsConfigConfigured(producer.AccessoryVisualeffects) { + failures = append(failures, validateAccessoryVisualeffectsConfig(fieldPrefix+".accessory_visualeffects", producer.AccessoryVisualeffects)...) } } @@ -1666,18 +1666,23 @@ func validateAutogenConfig(cfg AutogenConfig) []error { default: failures = append(failures, fmt.Errorf("%s.mode %q is not supported", fieldPrefix, consumer.Mode)) } - if strings.TrimSpace(consumer.Root) == "" { - failures = append(failures, fmt.Errorf("%s.root is required", fieldPrefix)) + if strings.TrimSpace(consumer.Mode) == "accessory_visualeffects" && accessoryVisualeffectsConfigConfigured(consumer.AccessoryVisualeffects) { + failures = append(failures, validateAccessoryVisualeffectsConfig(fieldPrefix+".accessory_visualeffects", consumer.AccessoryVisualeffects)...) } - if len(consumer.Include) == 0 { - failures = append(failures, fmt.Errorf("%s.include must contain at least one glob", fieldPrefix)) + // A manifest_file consumer reads a pre-resolved local manifest, so the + // released-source fields (root/include/derive/manifest) are never read + // at build time — don't require them. See resolveAutogenConsumerManifest. + if strings.TrimSpace(consumer.ManifestFile) == "" { + if strings.TrimSpace(consumer.Root) == "" { + failures = append(failures, fmt.Errorf("%s.root is required", fieldPrefix)) + } + if len(consumer.Include) == 0 { + failures = append(failures, fmt.Errorf("%s.include must contain at least one glob", fieldPrefix)) + } + failures = append(failures, validateGlobList(fieldPrefix+".include", consumer.Include)...) + failures = append(failures, validateAutogenDeriveConfig(fieldPrefix+".derive", consumer.Derive)...) + failures = append(failures, validateAutogenManifestConfig(fieldPrefix+".manifest", consumer.Manifest)...) } - failures = append(failures, validateGlobList(fieldPrefix+".include", consumer.Include)...) - failures = append(failures, validateAutogenDeriveConfig(fieldPrefix+".derive", consumer.Derive)...) - if strings.TrimSpace(consumer.Mode) == "accessory_visualeffects" && headVisualeffectsConfigConfigured(consumer.HeadVisualeffects) { - failures = append(failures, validateHeadVisualeffectsConfig(fieldPrefix+".accessory_visualeffects", consumer.HeadVisualeffects)...) - } - failures = append(failures, validateAutogenManifestConfig(fieldPrefix+".manifest", consumer.Manifest)...) } return failures @@ -1737,7 +1742,7 @@ func validateGeneratedConfig(cfg GeneratedConfig) []error { return failures } -func headVisualeffectsConfigConfigured(cfg HeadVisualeffectsConfig) bool { +func accessoryVisualeffectsConfigConfigured(cfg AccessoryVisualeffectsConfig) bool { return len(cfg.Groups) > 0 || strings.TrimSpace(cfg.GroupTokenSource) != "" || strings.TrimSpace(cfg.CategoryFrom) != "" || @@ -1750,7 +1755,7 @@ func headVisualeffectsConfigConfigured(cfg HeadVisualeffectsConfig) bool { len(cfg.RowDefaults) > 0 } -func validateHeadVisualeffectsConfig(fieldPrefix string, cfg HeadVisualeffectsConfig) []error { +func validateAccessoryVisualeffectsConfig(fieldPrefix string, cfg AccessoryVisualeffectsConfig) []error { var failures []error groupTokenSource := strings.TrimSpace(cfg.GroupTokenSource) switch groupTokenSource { diff --git a/internal/project/project_test.go b/internal/project/project_test.go index b4a8c51..ca1b8f9 100644 --- a/internal/project/project_test.go +++ b/internal/project/project_test.go @@ -1313,7 +1313,7 @@ func TestValidateLayoutRejectsInvalidAutogenConsumerConfig(t *testing.T) { } } -func TestValidateLayoutRejectsInvalidHeadVisualeffectsConfig(t *testing.T) { +func TestValidateLayoutRejectsInvalidAccessoryVisualeffectsConfig(t *testing.T) { root := t.TempDir() mkdirAll(t, filepath.Join(root, "src")) mkdirAll(t, filepath.Join(root, "build")) @@ -1338,8 +1338,8 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsConfig(t *testing.T) { AssetName: "sow-accessory-vfx-manifest.json", CacheName: "sow-accessory-vfx-manifest.json", }, - HeadVisualeffects: HeadVisualeffectsConfig{ - Groups: map[string]HeadVisualeffectGroupConfig{ + AccessoryVisualeffects: AccessoryVisualeffectsConfig{ + Groups: map[string]AccessoryVisualeffectGroupConfig{ "head_jewels": { ModelColumns: []string{"Imp Root M Node"}, }, @@ -1355,7 +1355,7 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsConfig(t *testing.T) { err := proj.ValidateLayout() if err == nil { - t.Fatal("expected head visualeffects validation error") + t.Fatal("expected accessory visualeffects validation error") } for _, needle := range []string{ "autogen.consumers[0].accessory_visualeffects.groups[head_jewels].prefix", @@ -1369,7 +1369,7 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsConfig(t *testing.T) { } } -func TestValidateLayoutRejectsInvalidHeadVisualeffectsNamingConfig(t *testing.T) { +func TestValidateLayoutRejectsInvalidAccessoryVisualeffectsNamingConfig(t *testing.T) { root := t.TempDir() mkdirAll(t, filepath.Join(root, "src")) mkdirAll(t, filepath.Join(root, "build")) @@ -1394,8 +1394,8 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsNamingConfig(t *testing.T) AssetName: "sow-accessory-vfx-manifest.json", CacheName: "sow-accessory-vfx-manifest.json", }, - HeadVisualeffects: HeadVisualeffectsConfig{ - Groups: map[string]HeadVisualeffectGroupConfig{ + AccessoryVisualeffects: AccessoryVisualeffectsConfig{ + Groups: map[string]AccessoryVisualeffectGroupConfig{ "head_features": {}, }, GroupTokenSource: "unsupported", @@ -1411,7 +1411,7 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsNamingConfig(t *testing.T) err := proj.ValidateLayout() if err == nil { - t.Fatal("expected head visualeffects naming validation error") + t.Fatal("expected accessory visualeffects naming validation error") } for _, needle := range []string{ "autogen.consumers[0].accessory_visualeffects.group_token_source", @@ -1425,7 +1425,7 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsNamingConfig(t *testing.T) } } -func TestLoadRejectsLegacyHeadVisualeffectsNamingFields(t *testing.T) { +func TestLoadRejectsLegacyAccessoryVisualeffectsNamingFields(t *testing.T) { root := t.TempDir() writeProjectFile(t, filepath.Join(root, ConfigFile), ` module: @@ -1459,7 +1459,7 @@ autogen: _, err := Load(root) if err == nil { - t.Fatal("expected legacy head visualeffects naming fields to be rejected") + t.Fatal("expected legacy accessory visualeffects naming fields to be rejected") } if !strings.Contains(err.Error(), "legacy_groups") { t.Fatalf("expected legacy_groups unknown field error, got %v", err) diff --git a/internal/topdata/autogen.go b/internal/topdata/autogen.go index 0a8e6f3..37dc846 100644 --- a/internal/topdata/autogen.go +++ b/internal/topdata/autogen.go @@ -35,7 +35,7 @@ type autogenManifest struct { Repo string `json:"repo"` Ref string `json:"ref"` GeneratedAt string `json:"generated_at"` - HeadVisualeffects *project.HeadVisualeffectsConfig `json:"accessory_visualeffects,omitempty"` + AccessoryVisualeffects *project.AccessoryVisualeffectsConfig `json:"accessory_visualeffects,omitempty"` Entries []autogenManifestEntry `json:"entries"` } @@ -100,7 +100,7 @@ func applyAutogenConsumers(p *project.Project, collected []nativeCollectedDatase case "parts_rows": result = augmentWithAutogeneratedParts(result, autogenPartsInventory(entries)) case "accessory_visualeffects": - result, err = augmentWithAutogeneratedHeadVisualeffects(result, entries, consumer, manifest.HeadVisualeffects) + result, err = augmentWithAutogeneratedAccessoryVisualeffects(result, entries, consumer, manifest.AccessoryVisualeffects) if err != nil { return nil, err } @@ -178,7 +178,7 @@ func preserveAutogenConsumerLockEntries(collected []nativeCollectedDataset, cons func autogenConsumerManagedLockKeyMatcher(consumer project.AutogenConsumerConfig) func(string) bool { switch consumer.Mode { case "accessory_visualeffects": - policy := resolveHeadVisualeffectsPolicy(consumer, nil) + policy := resolveAccessoryVisualeffectsPolicy(consumer, nil) delimiter := policy.Delimiter if delimiter == "" { delimiter = "/" @@ -186,7 +186,7 @@ func autogenConsumerManagedLockKeyMatcher(consumer project.AutogenConsumerConfig prefix := "visualeffects:" groups := make(map[string]struct{}, len(policy.Groups)) for group, groupPolicy := range policy.Groups { - token := applyHeadVisualeffectCase(headVisualeffectGroupToken(group, groupPolicy, policy), policy) + token := applyAccessoryVisualeffectCase(accessoryVisualeffectGroupToken(group, groupPolicy, policy), policy) if strings.TrimSpace(token) != "" { groups[token] = struct{}{} } @@ -816,12 +816,12 @@ func augmentWithAutogeneratedCachedModels(collected []nativeCollectedDataset, en return result, nil } -func augmentWithAutogeneratedHeadVisualeffects(collected []nativeCollectedDataset, entries []autogenManifestEntry, consumer project.AutogenConsumerConfig, manifestPolicy *project.HeadVisualeffectsConfig) ([]nativeCollectedDataset, error) { +func augmentWithAutogeneratedAccessoryVisualeffects(collected []nativeCollectedDataset, entries []autogenManifestEntry, consumer project.AutogenConsumerConfig, manifestPolicy *project.AccessoryVisualeffectsConfig) ([]nativeCollectedDataset, error) { if len(entries) == 0 { return collected, nil } - policy := resolveHeadVisualeffectsPolicy(consumer, manifestPolicy) + policy := resolveAccessoryVisualeffectsPolicy(consumer, manifestPolicy) result := append([]nativeCollectedDataset(nil), collected...) for i, dataset := range result { if dataset.Dataset.Name != "visualeffects" { @@ -871,12 +871,12 @@ func augmentWithAutogeneratedHeadVisualeffects(collected []nativeCollectedDatase } for _, entry := range entries { - key, label, modelStem, groupPolicy, ok := headVisualeffectIdentity(dataset.Dataset.Name, entry, policy) + key, label, modelStem, groupPolicy, ok := accessoryVisualeffectIdentity(dataset.Dataset.Name, entry, policy) if !ok { continue } if existing, exists := rowByKey[key]; exists { - applyDiscoveredHeadVisualeffectDefaults(existing, dataset.Columns, modelStem, label, policy, groupPolicy) + applyDiscoveredAccessoryVisualeffectDefaults(existing, dataset.Columns, modelStem, label, policy, groupPolicy) continue } @@ -889,7 +889,7 @@ func augmentWithAutogeneratedHeadVisualeffects(collected []nativeCollectedDatase } lockData[key] = rowID } - newRow := createDefaultHeadVisualeffectRow(dataset.Columns, rowID, key, label, modelStem, policy, groupPolicy) + newRow := createDefaultAccessoryVisualeffectRow(dataset.Columns, rowID, key, label, modelStem, policy, groupPolicy) rows = append(rows, newRow) rowByKey[key] = newRow } @@ -912,8 +912,8 @@ func nextAvailableAutogenID(used map[int]struct{}) int { } } -type headVisualeffectsPolicy struct { - Groups map[string]headVisualeffectsGroupPolicy +type accessoryVisualeffectsPolicy struct { + Groups map[string]accessoryVisualeffectsGroupPolicy GroupTokenSource string CategoryFrom string Delimiter string @@ -925,22 +925,22 @@ type headVisualeffectsPolicy struct { RowDefaults map[string]string } -type headVisualeffectsGroupPolicy struct { +type accessoryVisualeffectsGroupPolicy struct { Prefix string ModelColumns []string RowDefaults map[string]string } -func resolveHeadVisualeffectsPolicy(consumer project.AutogenConsumerConfig, manifestPolicy *project.HeadVisualeffectsConfig) headVisualeffectsPolicy { - policy := defaultHeadVisualeffectsPolicy() +func resolveAccessoryVisualeffectsPolicy(consumer project.AutogenConsumerConfig, manifestPolicy *project.AccessoryVisualeffectsConfig) accessoryVisualeffectsPolicy { + policy := defaultAccessoryVisualeffectsPolicy() if manifestPolicy != nil { - applyHeadVisualeffectsConfig(&policy, *manifestPolicy) + applyAccessoryVisualeffectsConfig(&policy, *manifestPolicy) } - applyHeadVisualeffectsConfig(&policy, consumer.HeadVisualeffects) + applyAccessoryVisualeffectsConfig(&policy, consumer.AccessoryVisualeffects) return policy } -func applyHeadVisualeffectsConfig(policy *headVisualeffectsPolicy, cfg project.HeadVisualeffectsConfig) { +func applyAccessoryVisualeffectsConfig(policy *accessoryVisualeffectsPolicy, cfg project.AccessoryVisualeffectsConfig) { for group, groupCfg := range cfg.Groups { group = strings.TrimSpace(group) prefix := strings.TrimSpace(groupCfg.Prefix) @@ -951,13 +951,13 @@ func applyHeadVisualeffectsConfig(policy *headVisualeffectsPolicy, cfg project.H if prefix != "" { groupPolicy.Prefix = prefix } - if columns := normalizeHeadVisualeffectsModelColumns(groupCfg.ModelColumn, groupCfg.ModelColumns); len(columns) > 0 { + if columns := normalizeAccessoryVisualeffectsModelColumns(groupCfg.ModelColumn, groupCfg.ModelColumns); len(columns) > 0 { groupPolicy.ModelColumns = columns } if groupPolicy.RowDefaults == nil { groupPolicy.RowDefaults = map[string]string{} } - mergeStringMap(groupPolicy.RowDefaults, normalizeHeadVisualeffectsRowDefaults(groupCfg.RowDefaults)) + mergeStringMap(groupPolicy.RowDefaults, normalizeAccessoryVisualeffectsRowDefaults(groupCfg.RowDefaults)) policy.Groups[group] = groupPolicy } if strings.TrimSpace(cfg.GroupTokenSource) != "" { @@ -984,12 +984,12 @@ func applyHeadVisualeffectsConfig(policy *headVisualeffectsPolicy, cfg project.H if strings.TrimSpace(cfg.ModelColumn) != "" { policy.ModelColumn = strings.TrimSpace(cfg.ModelColumn) } - mergeStringMap(policy.RowDefaults, normalizeHeadVisualeffectsRowDefaults(cfg.RowDefaults)) + mergeStringMap(policy.RowDefaults, normalizeAccessoryVisualeffectsRowDefaults(cfg.RowDefaults)) } -func defaultHeadVisualeffectsPolicy() headVisualeffectsPolicy { - return headVisualeffectsPolicy{ - Groups: map[string]headVisualeffectsGroupPolicy{ +func defaultAccessoryVisualeffectsPolicy() accessoryVisualeffectsPolicy { + return accessoryVisualeffectsPolicy{ + Groups: map[string]accessoryVisualeffectsGroupPolicy{ "chest_accessories": {}, "head_accessories": {}, "head_decorations": {}, @@ -1011,7 +1011,7 @@ func defaultHeadVisualeffectsPolicy() headVisualeffectsPolicy { } } -func normalizeHeadVisualeffectsModelColumns(modelColumn string, modelColumns []string) []string { +func normalizeAccessoryVisualeffectsModelColumns(modelColumn string, modelColumns []string) []string { var result []string if column := strings.TrimSpace(modelColumn); column != "" { result = append(result, column) @@ -1028,7 +1028,7 @@ func normalizeHeadVisualeffectsModelColumns(modelColumn string, modelColumns []s return result } -func normalizeHeadVisualeffectsRowDefaults(defaults map[string]string) map[string]string { +func normalizeAccessoryVisualeffectsRowDefaults(defaults map[string]string) map[string]string { result := map[string]string{} for column, value := range defaults { column = strings.TrimSpace(column) @@ -1046,44 +1046,44 @@ func mergeStringMap(target map[string]string, source map[string]string) { } } -func headVisualeffectIdentity(dataset string, entry autogenManifestEntry, policy headVisualeffectsPolicy) (string, string, string, headVisualeffectsGroupPolicy, bool) { - entry = normalizeHeadVisualeffectEntry(entry) +func accessoryVisualeffectIdentity(dataset string, entry autogenManifestEntry, policy accessoryVisualeffectsPolicy) (string, string, string, accessoryVisualeffectsGroupPolicy, bool) { + entry = normalizeAccessoryVisualeffectEntry(entry) group, ok := policy.Groups[entry.Group] if !ok || strings.TrimSpace(entry.ModelStem) == "" { - return "", "", "", headVisualeffectsGroupPolicy{}, false + return "", "", "", accessoryVisualeffectsGroupPolicy{}, false } modelStem := strings.TrimSpace(entry.ModelStem) - stem := stripHeadVisualeffectModelPrefix(modelStem, policy) + stem := stripAccessoryVisualeffectModelPrefix(modelStem, policy) stem = strings.TrimSpace(stem) if stem == "" { - return "", "", "", headVisualeffectsGroupPolicy{}, false + return "", "", "", accessoryVisualeffectsGroupPolicy{}, false } - category := headVisualeffectCategory(entry, policy) - groupToken := headVisualeffectGroupToken(entry.Group, group, policy) + category := accessoryVisualeffectCategory(entry, policy) + groupToken := accessoryVisualeffectGroupToken(entry.Group, group, policy) values := map[string]string{ "dataset": dataset, - "group": applyHeadVisualeffectCase(groupToken, policy), + "group": applyAccessoryVisualeffectCase(groupToken, policy), "group_raw": entry.Group, - "prefix": applyHeadVisualeffectCase(group.Prefix, policy), - "category": applyHeadVisualeffectCase(category, policy), + "prefix": applyAccessoryVisualeffectCase(group.Prefix, policy), + "category": applyAccessoryVisualeffectCase(category, policy), "category_upper": strings.ToUpper(category), - "category_segment": headVisualeffectDelimitedSegment(applyHeadVisualeffectCase(category, policy), policy.Delimiter), - "category_segment_upper": headVisualeffectDelimitedSegment(strings.ToUpper(category), policy.Delimiter), - "subgroup": applyHeadVisualeffectCase(entry.Subgroup, policy), - "stem": applyHeadVisualeffectCase(stem, policy), + "category_segment": accessoryVisualeffectDelimitedSegment(applyAccessoryVisualeffectCase(category, policy), policy.Delimiter), + "category_segment_upper": accessoryVisualeffectDelimitedSegment(strings.ToUpper(category), policy.Delimiter), + "subgroup": applyAccessoryVisualeffectCase(entry.Subgroup, policy), + "stem": applyAccessoryVisualeffectCase(stem, policy), "stem_upper": strings.ToUpper(stem), "model_stem": modelStem, "delimiter": policy.Delimiter, } - key := expandHeadVisualeffectsFormat(policy.KeyFormat, values) - label := expandHeadVisualeffectsFormat(policy.LabelFormat, values) + key := expandAccessoryVisualeffectsFormat(policy.KeyFormat, values) + label := expandAccessoryVisualeffectsFormat(policy.LabelFormat, values) if strings.TrimSpace(key) == "" || strings.TrimSpace(label) == "" { - return "", "", "", headVisualeffectsGroupPolicy{}, false + return "", "", "", accessoryVisualeffectsGroupPolicy{}, false } return key, label, modelStem, group, true } -func normalizeHeadVisualeffectEntry(entry autogenManifestEntry) autogenManifestEntry { +func normalizeAccessoryVisualeffectEntry(entry autogenManifestEntry) autogenManifestEntry { entry.Group = strings.TrimSpace(entry.Group) if strings.TrimSpace(entry.Group) == "" && strings.TrimSpace(entry.Source) != "" { parts := strings.Split(filepath.ToSlash(entry.Source), "/") @@ -1106,7 +1106,7 @@ func normalizeHeadVisualeffectEntry(entry autogenManifestEntry) autogenManifestE return entry } -func stripHeadVisualeffectModelPrefix(modelStem string, policy headVisualeffectsPolicy) string { +func stripAccessoryVisualeffectModelPrefix(modelStem string, policy accessoryVisualeffectsPolicy) string { stem := modelStem for _, prefix := range policy.StripModelPrefixes { prefix = strings.TrimSpace(prefix) @@ -1118,7 +1118,7 @@ func stripHeadVisualeffectModelPrefix(modelStem string, policy headVisualeffects return stem } -func headVisualeffectGroupToken(groupName string, group headVisualeffectsGroupPolicy, policy headVisualeffectsPolicy) string { +func accessoryVisualeffectGroupToken(groupName string, group accessoryVisualeffectsGroupPolicy, policy accessoryVisualeffectsPolicy) string { if policy.GroupTokenSource == "folder_name" { return groupName } @@ -1128,7 +1128,7 @@ func headVisualeffectGroupToken(groupName string, group headVisualeffectsGroupPo return groupName } -func headVisualeffectCategory(entry autogenManifestEntry, policy headVisualeffectsPolicy) string { +func accessoryVisualeffectCategory(entry autogenManifestEntry, policy accessoryVisualeffectsPolicy) string { switch policy.CategoryFrom { case "immediate_parent": return strings.TrimSpace(entry.Category) @@ -1139,14 +1139,14 @@ func headVisualeffectCategory(entry autogenManifestEntry, policy headVisualeffec } } -func headVisualeffectDelimitedSegment(value, delimiter string) string { +func accessoryVisualeffectDelimitedSegment(value, delimiter string) string { if strings.TrimSpace(value) == "" { return "" } return value + delimiter } -func applyHeadVisualeffectCase(value string, policy headVisualeffectsPolicy) string { +func applyAccessoryVisualeffectCase(value string, policy accessoryVisualeffectsPolicy) string { switch policy.Case { case "lower": return strings.ToLower(value) @@ -1157,7 +1157,7 @@ func applyHeadVisualeffectCase(value string, policy headVisualeffectsPolicy) str } } -func expandHeadVisualeffectsFormat(format string, values map[string]string) string { +func expandAccessoryVisualeffectsFormat(format string, values map[string]string) string { result := format for key, value := range values { result = strings.ReplaceAll(result, "{"+key+"}", value) @@ -1165,7 +1165,7 @@ func expandHeadVisualeffectsFormat(format string, values map[string]string) stri return result } -func createDefaultHeadVisualeffectRow(columns []string, rowID int, key, label, modelStem string, policy headVisualeffectsPolicy, group headVisualeffectsGroupPolicy) map[string]any { +func createDefaultAccessoryVisualeffectRow(columns []string, rowID int, key, label, modelStem string, policy accessoryVisualeffectsPolicy, group accessoryVisualeffectsGroupPolicy) map[string]any { row := map[string]any{ "id": rowID, "key": key, @@ -1180,13 +1180,13 @@ func createDefaultHeadVisualeffectRow(columns []string, rowID int, key, label, m for column, value := range group.RowDefaults { row[column] = value } - for _, column := range headVisualeffectModelColumns(policy, group) { + for _, column := range accessoryVisualeffectModelColumns(policy, group) { row[column] = modelStem } return row } -func applyDiscoveredHeadVisualeffectDefaults(row map[string]any, columns []string, modelStem, label string, policy headVisualeffectsPolicy, group headVisualeffectsGroupPolicy) { +func applyDiscoveredAccessoryVisualeffectDefaults(row map[string]any, columns []string, modelStem, label string, policy accessoryVisualeffectsPolicy, group accessoryVisualeffectsGroupPolicy) { if isNullLikeValue(row["Label"]) { row["Label"] = label } @@ -1200,7 +1200,7 @@ func applyDiscoveredHeadVisualeffectDefaults(row map[string]any, columns []strin row[column] = value } } - for _, column := range headVisualeffectModelColumns(policy, group) { + for _, column := range accessoryVisualeffectModelColumns(policy, group) { if isNullLikeValue(row[column]) { row[column] = modelStem } @@ -1212,7 +1212,7 @@ func applyDiscoveredHeadVisualeffectDefaults(row map[string]any, columns []strin } } -func headVisualeffectModelColumns(policy headVisualeffectsPolicy, group headVisualeffectsGroupPolicy) []string { +func accessoryVisualeffectModelColumns(policy accessoryVisualeffectsPolicy, group accessoryVisualeffectsGroupPolicy) []string { if len(group.ModelColumns) > 0 { return group.ModelColumns } @@ -1230,14 +1230,14 @@ func formatAutogenManifest(root string, producer project.AutogenProducerConfig, GeneratedAt: time.Now().UTC().Format(time.RFC3339), Entries: entries, } - if autogenHeadVisualeffectsConfigConfigured(producer.HeadVisualeffects) { - cfg := producer.HeadVisualeffects - manifest.HeadVisualeffects = &cfg + if autogenAccessoryVisualeffectsConfigConfigured(producer.AccessoryVisualeffects) { + cfg := producer.AccessoryVisualeffects + manifest.AccessoryVisualeffects = &cfg } return json.MarshalIndent(manifest, "", " ") } -func autogenHeadVisualeffectsConfigConfigured(cfg project.HeadVisualeffectsConfig) bool { +func autogenAccessoryVisualeffectsConfigConfigured(cfg project.AccessoryVisualeffectsConfig) bool { return len(cfg.Groups) > 0 || strings.TrimSpace(cfg.GroupTokenSource) != "" || strings.TrimSpace(cfg.CategoryFrom) != "" || diff --git a/internal/topdata/topdata_test.go b/internal/topdata/topdata_test.go index 121217d..4529cde 100644 --- a/internal/topdata/topdata_test.go +++ b/internal/topdata/topdata_test.go @@ -7633,7 +7633,7 @@ func TestApplyAutogenConsumersAugmentsPartsFromLocalOverride(t *testing.T) { } } -func TestApplyAutogenConsumersAugmentsHeadVisualeffectsFromLocalOverride(t *testing.T) { +func TestApplyAutogenConsumersAugmentsAccessoryVisualeffectsFromLocalOverride(t *testing.T) { root := testProjectRoot(t) overrideRoot := filepath.Join(root, "autogen-assets") mkdirAll(t, filepath.Join(overrideRoot, "vfxs", "head_accessories", "hat")) @@ -7717,7 +7717,7 @@ func TestApplyAutogenConsumersAugmentsHeadVisualeffectsFromLocalOverride(t *test } } -func TestApplyAutogenConsumersUsesFolderDrivenSlashHeadVisualeffectsNames(t *testing.T) { +func TestApplyAutogenConsumersUsesFolderDrivenSlashAccessoryVisualeffectsNames(t *testing.T) { root := testProjectRoot(t) overrideRoot := filepath.Join(root, "autogen-assets") mkdirAll(t, filepath.Join(overrideRoot, "vfxs", "head_features", "sinfar", "ears_plt")) @@ -7735,8 +7735,8 @@ func TestApplyAutogenConsumersUsesFolderDrivenSlashHeadVisualeffectsNames(t *tes Derive: project.AutogenDeriveConfig{Kind: "model_stem", GroupFrom: "first_path_segment"}, Manifest: project.AutogenManifestConfig{ReleaseTag: "head-vfx-manifest-current", AssetName: "sow-accessory-vfx-manifest.json", CacheName: "sow-accessory-vfx-manifest.json"}, LocalOverrideRoot: "autogen-assets", - HeadVisualeffects: project.HeadVisualeffectsConfig{ - Groups: map[string]project.HeadVisualeffectGroupConfig{ + AccessoryVisualeffects: project.AccessoryVisualeffectsConfig{ + Groups: map[string]project.AccessoryVisualeffectGroupConfig{ "head_features": { ModelColumns: []string{"Imp_HeadCon_Node", "Imp_Root_H_Node"}, }, @@ -7790,7 +7790,7 @@ func TestApplyAutogenConsumersUsesFolderDrivenSlashHeadVisualeffectsNames(t *tes } } -func TestBuildNativeUsesConfiguredHeadVisualeffectsGroups(t *testing.T) { +func TestBuildNativeUsesConfiguredAccessoryVisualeffectsGroups(t *testing.T) { root := t.TempDir() mkdirAll(t, filepath.Join(root, "src")) mkdirAll(t, filepath.Join(root, "build")) @@ -7878,7 +7878,7 @@ autogen: } } -func TestBuildGenerated2DAAssetsAppendsCachedModelsFromHeadVisualeffects(t *testing.T) { +func TestBuildGenerated2DAAssetsAppendsCachedModelsFromAccessoryVisualeffects(t *testing.T) { root := testProjectRoot(t) mkdirAll(t, filepath.Join(root, "assets", "vfxs", "chest_accessories")) mkdirAll(t, filepath.Join(root, "assets", "vfxs", "head_accessories")) @@ -13139,7 +13139,7 @@ func TestBuildNativeWithReleasedPartsManifestUsesAssetsServerOverride(t *testing } } -func TestBuildNativeWithReleasedHeadVisualeffectsManifest(t *testing.T) { +func TestBuildNativeWithReleasedAccessoryVisualeffectsManifest(t *testing.T) { root := t.TempDir() projRoot := filepath.Join(root, "project") mkdirAll(t, filepath.Join(projRoot, "src")) @@ -13274,7 +13274,7 @@ func TestBuildNativeWithReleasedHeadVisualeffectsManifest(t *testing.T) { } } -func TestBuildNativePrefersRemoteReleasedHeadVisualeffectsManifestOverFreshCache(t *testing.T) { +func TestBuildNativePrefersRemoteReleasedAccessoryVisualeffectsManifestOverFreshCache(t *testing.T) { root := t.TempDir() projRoot := filepath.Join(root, "project") mkdirAll(t, filepath.Join(projRoot, "src"))