fix failing checks + cosmetic renames #13
@@ -1893,7 +1893,7 @@ func TestPlanHAKsWritesManifestWithoutArchives(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildHAKsWritesConfiguredHeadVisualeffectsAutogenManifest(t *testing.T) {
|
func TestBuildHAKsWritesConfiguredAccessoryVisualeffectsAutogenManifest(t *testing.T) {
|
||||||
root := t.TempDir()
|
root := t.TempDir()
|
||||||
mustMkdir(t, filepath.Join(root, "src"))
|
mustMkdir(t, filepath.Join(root, "src"))
|
||||||
mustMkdir(t, filepath.Join(root, "assets", "vfxs", "chest_accessories"))
|
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"))
|
headRaw, err := os.ReadFile(filepath.Join(root, "build", "sow-accessory-vfx-manifest.json"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("read head visualeffects manifest: %v", err)
|
t.Fatalf("read accessory visualeffects manifest: %v", err)
|
||||||
}
|
}
|
||||||
text := string(headRaw)
|
text := string(headRaw)
|
||||||
for _, want := range []string{
|
for _, want := range []string{
|
||||||
@@ -1998,12 +1998,12 @@ func TestBuildHAKsWritesConfiguredHeadVisualeffectsAutogenManifest(t *testing.T)
|
|||||||
`"model_stem": "hfx_hair_bangs"`,
|
`"model_stem": "hfx_hair_bangs"`,
|
||||||
} {
|
} {
|
||||||
if !strings.Contains(text, want) {
|
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()
|
root := t.TempDir()
|
||||||
mustMkdir(t, filepath.Join(root, "src"))
|
mustMkdir(t, filepath.Join(root, "src"))
|
||||||
mustMkdir(t, filepath.Join(root, "assets", "vfxs", "head_features", "sinfar", "ears_plt"))
|
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"))
|
headRaw, err := os.ReadFile(filepath.Join(root, "build", "sow-accessory-vfx-manifest.json"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("read head visualeffects manifest: %v", err)
|
t.Fatalf("read accessory visualeffects manifest: %v", err)
|
||||||
}
|
}
|
||||||
text := string(headRaw)
|
text := string(headRaw)
|
||||||
for _, want := range []string{
|
for _, want := range []string{
|
||||||
@@ -2095,7 +2095,7 @@ func TestBuildHAKsWritesFolderCategoryInHeadVisualeffectsAutogenManifest(t *test
|
|||||||
`"category_from": "immediate_parent"`,
|
`"category_from": "immediate_parent"`,
|
||||||
} {
|
} {
|
||||||
if !strings.Contains(text, want) {
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+24
-19
@@ -349,7 +349,7 @@ type AutogenProducerConfig struct {
|
|||||||
Include []string `json:"include" yaml:"include"`
|
Include []string `json:"include" yaml:"include"`
|
||||||
Derive AutogenDeriveConfig `json:"derive" yaml:"derive"`
|
Derive AutogenDeriveConfig `json:"derive" yaml:"derive"`
|
||||||
Manifest AutogenManifestConfig `json:"manifest" yaml:"manifest"`
|
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 {
|
type AutogenConsumerConfig struct {
|
||||||
@@ -362,14 +362,14 @@ type AutogenConsumerConfig struct {
|
|||||||
Include []string `json:"include" yaml:"include"`
|
Include []string `json:"include" yaml:"include"`
|
||||||
Derive AutogenDeriveConfig `json:"derive" yaml:"derive"`
|
Derive AutogenDeriveConfig `json:"derive" yaml:"derive"`
|
||||||
PartsRows PartsRowsConfig `json:"parts_rows" yaml:"parts_rows"`
|
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"`
|
Manifest AutogenManifestConfig `json:"manifest" yaml:"manifest"`
|
||||||
LocalOverrideRoot string `json:"local_override_root,omitempty" yaml:"local_override_root,omitempty"`
|
LocalOverrideRoot string `json:"local_override_root,omitempty" yaml:"local_override_root,omitempty"`
|
||||||
ManifestFile string `json:"manifest_file,omitempty" yaml:"manifest_file,omitempty"`
|
ManifestFile string `json:"manifest_file,omitempty" yaml:"manifest_file,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type HeadVisualeffectsConfig struct {
|
type AccessoryVisualeffectsConfig struct {
|
||||||
Groups map[string]HeadVisualeffectGroupConfig `json:"groups,omitempty" yaml:"groups"`
|
Groups map[string]AccessoryVisualeffectGroupConfig `json:"groups,omitempty" yaml:"groups"`
|
||||||
GroupTokenSource string `json:"group_token_source,omitempty" yaml:"group_token_source"`
|
GroupTokenSource string `json:"group_token_source,omitempty" yaml:"group_token_source"`
|
||||||
CategoryFrom string `json:"category_from,omitempty" yaml:"category_from"`
|
CategoryFrom string `json:"category_from,omitempty" yaml:"category_from"`
|
||||||
Delimiter string `json:"delimiter,omitempty" yaml:"delimiter"`
|
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"`
|
RowDefaults map[string]string `json:"row_defaults,omitempty" yaml:"row_defaults"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type HeadVisualeffectGroupConfig struct {
|
type AccessoryVisualeffectGroupConfig struct {
|
||||||
Prefix string `json:"prefix" yaml:"prefix"`
|
Prefix string `json:"prefix" yaml:"prefix"`
|
||||||
ModelColumn string `json:"model_column,omitempty" yaml:"model_column"`
|
ModelColumn string `json:"model_column,omitempty" yaml:"model_column"`
|
||||||
ModelColumns []string `json:"model_columns,omitempty" yaml:"model_columns"`
|
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, validateGlobList(fieldPrefix+".include", producer.Include)...)
|
||||||
failures = append(failures, validateAutogenDeriveConfig(fieldPrefix+".derive", producer.Derive)...)
|
failures = append(failures, validateAutogenDeriveConfig(fieldPrefix+".derive", producer.Derive)...)
|
||||||
failures = append(failures, validateAutogenManifestConfig(fieldPrefix+".manifest", producer.Manifest)...)
|
failures = append(failures, validateAutogenManifestConfig(fieldPrefix+".manifest", producer.Manifest)...)
|
||||||
if headVisualeffectsConfigConfigured(producer.HeadVisualeffects) {
|
if accessoryVisualeffectsConfigConfigured(producer.AccessoryVisualeffects) {
|
||||||
failures = append(failures, validateHeadVisualeffectsConfig(fieldPrefix+".accessory_visualeffects", producer.HeadVisualeffects)...)
|
failures = append(failures, validateAccessoryVisualeffectsConfig(fieldPrefix+".accessory_visualeffects", producer.AccessoryVisualeffects)...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1666,18 +1666,23 @@ func validateAutogenConfig(cfg AutogenConfig) []error {
|
|||||||
default:
|
default:
|
||||||
failures = append(failures, fmt.Errorf("%s.mode %q is not supported", fieldPrefix, consumer.Mode))
|
failures = append(failures, fmt.Errorf("%s.mode %q is not supported", fieldPrefix, consumer.Mode))
|
||||||
}
|
}
|
||||||
if strings.TrimSpace(consumer.Root) == "" {
|
if strings.TrimSpace(consumer.Mode) == "accessory_visualeffects" && accessoryVisualeffectsConfigConfigured(consumer.AccessoryVisualeffects) {
|
||||||
failures = append(failures, fmt.Errorf("%s.root is required", fieldPrefix))
|
failures = append(failures, validateAccessoryVisualeffectsConfig(fieldPrefix+".accessory_visualeffects", consumer.AccessoryVisualeffects)...)
|
||||||
}
|
}
|
||||||
if len(consumer.Include) == 0 {
|
// A manifest_file consumer reads a pre-resolved local manifest, so the
|
||||||
failures = append(failures, fmt.Errorf("%s.include must contain at least one glob", fieldPrefix))
|
// 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
|
return failures
|
||||||
@@ -1737,7 +1742,7 @@ func validateGeneratedConfig(cfg GeneratedConfig) []error {
|
|||||||
return failures
|
return failures
|
||||||
}
|
}
|
||||||
|
|
||||||
func headVisualeffectsConfigConfigured(cfg HeadVisualeffectsConfig) bool {
|
func accessoryVisualeffectsConfigConfigured(cfg AccessoryVisualeffectsConfig) bool {
|
||||||
return len(cfg.Groups) > 0 ||
|
return len(cfg.Groups) > 0 ||
|
||||||
strings.TrimSpace(cfg.GroupTokenSource) != "" ||
|
strings.TrimSpace(cfg.GroupTokenSource) != "" ||
|
||||||
strings.TrimSpace(cfg.CategoryFrom) != "" ||
|
strings.TrimSpace(cfg.CategoryFrom) != "" ||
|
||||||
@@ -1750,7 +1755,7 @@ func headVisualeffectsConfigConfigured(cfg HeadVisualeffectsConfig) bool {
|
|||||||
len(cfg.RowDefaults) > 0
|
len(cfg.RowDefaults) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateHeadVisualeffectsConfig(fieldPrefix string, cfg HeadVisualeffectsConfig) []error {
|
func validateAccessoryVisualeffectsConfig(fieldPrefix string, cfg AccessoryVisualeffectsConfig) []error {
|
||||||
var failures []error
|
var failures []error
|
||||||
groupTokenSource := strings.TrimSpace(cfg.GroupTokenSource)
|
groupTokenSource := strings.TrimSpace(cfg.GroupTokenSource)
|
||||||
switch groupTokenSource {
|
switch groupTokenSource {
|
||||||
|
|||||||
@@ -1313,7 +1313,7 @@ func TestValidateLayoutRejectsInvalidAutogenConsumerConfig(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestValidateLayoutRejectsInvalidHeadVisualeffectsConfig(t *testing.T) {
|
func TestValidateLayoutRejectsInvalidAccessoryVisualeffectsConfig(t *testing.T) {
|
||||||
root := t.TempDir()
|
root := t.TempDir()
|
||||||
mkdirAll(t, filepath.Join(root, "src"))
|
mkdirAll(t, filepath.Join(root, "src"))
|
||||||
mkdirAll(t, filepath.Join(root, "build"))
|
mkdirAll(t, filepath.Join(root, "build"))
|
||||||
@@ -1338,8 +1338,8 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsConfig(t *testing.T) {
|
|||||||
AssetName: "sow-accessory-vfx-manifest.json",
|
AssetName: "sow-accessory-vfx-manifest.json",
|
||||||
CacheName: "sow-accessory-vfx-manifest.json",
|
CacheName: "sow-accessory-vfx-manifest.json",
|
||||||
},
|
},
|
||||||
HeadVisualeffects: HeadVisualeffectsConfig{
|
AccessoryVisualeffects: AccessoryVisualeffectsConfig{
|
||||||
Groups: map[string]HeadVisualeffectGroupConfig{
|
Groups: map[string]AccessoryVisualeffectGroupConfig{
|
||||||
"head_jewels": {
|
"head_jewels": {
|
||||||
ModelColumns: []string{"Imp Root M Node"},
|
ModelColumns: []string{"Imp Root M Node"},
|
||||||
},
|
},
|
||||||
@@ -1355,7 +1355,7 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsConfig(t *testing.T) {
|
|||||||
|
|
||||||
err := proj.ValidateLayout()
|
err := proj.ValidateLayout()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("expected head visualeffects validation error")
|
t.Fatal("expected accessory visualeffects validation error")
|
||||||
}
|
}
|
||||||
for _, needle := range []string{
|
for _, needle := range []string{
|
||||||
"autogen.consumers[0].accessory_visualeffects.groups[head_jewels].prefix",
|
"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()
|
root := t.TempDir()
|
||||||
mkdirAll(t, filepath.Join(root, "src"))
|
mkdirAll(t, filepath.Join(root, "src"))
|
||||||
mkdirAll(t, filepath.Join(root, "build"))
|
mkdirAll(t, filepath.Join(root, "build"))
|
||||||
@@ -1394,8 +1394,8 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsNamingConfig(t *testing.T)
|
|||||||
AssetName: "sow-accessory-vfx-manifest.json",
|
AssetName: "sow-accessory-vfx-manifest.json",
|
||||||
CacheName: "sow-accessory-vfx-manifest.json",
|
CacheName: "sow-accessory-vfx-manifest.json",
|
||||||
},
|
},
|
||||||
HeadVisualeffects: HeadVisualeffectsConfig{
|
AccessoryVisualeffects: AccessoryVisualeffectsConfig{
|
||||||
Groups: map[string]HeadVisualeffectGroupConfig{
|
Groups: map[string]AccessoryVisualeffectGroupConfig{
|
||||||
"head_features": {},
|
"head_features": {},
|
||||||
},
|
},
|
||||||
GroupTokenSource: "unsupported",
|
GroupTokenSource: "unsupported",
|
||||||
@@ -1411,7 +1411,7 @@ func TestValidateLayoutRejectsInvalidHeadVisualeffectsNamingConfig(t *testing.T)
|
|||||||
|
|
||||||
err := proj.ValidateLayout()
|
err := proj.ValidateLayout()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("expected head visualeffects naming validation error")
|
t.Fatal("expected accessory visualeffects naming validation error")
|
||||||
}
|
}
|
||||||
for _, needle := range []string{
|
for _, needle := range []string{
|
||||||
"autogen.consumers[0].accessory_visualeffects.group_token_source",
|
"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()
|
root := t.TempDir()
|
||||||
writeProjectFile(t, filepath.Join(root, ConfigFile), `
|
writeProjectFile(t, filepath.Join(root, ConfigFile), `
|
||||||
module:
|
module:
|
||||||
@@ -1459,7 +1459,7 @@ autogen:
|
|||||||
|
|
||||||
_, err := Load(root)
|
_, err := Load(root)
|
||||||
if err == nil {
|
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") {
|
if !strings.Contains(err.Error(), "legacy_groups") {
|
||||||
t.Fatalf("expected legacy_groups unknown field error, got %v", err)
|
t.Fatalf("expected legacy_groups unknown field error, got %v", err)
|
||||||
|
|||||||
+58
-58
@@ -35,7 +35,7 @@ type autogenManifest struct {
|
|||||||
Repo string `json:"repo"`
|
Repo string `json:"repo"`
|
||||||
Ref string `json:"ref"`
|
Ref string `json:"ref"`
|
||||||
GeneratedAt string `json:"generated_at"`
|
GeneratedAt string `json:"generated_at"`
|
||||||
HeadVisualeffects *project.HeadVisualeffectsConfig `json:"accessory_visualeffects,omitempty"`
|
AccessoryVisualeffects *project.AccessoryVisualeffectsConfig `json:"accessory_visualeffects,omitempty"`
|
||||||
Entries []autogenManifestEntry `json:"entries"`
|
Entries []autogenManifestEntry `json:"entries"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@ func applyAutogenConsumers(p *project.Project, collected []nativeCollectedDatase
|
|||||||
case "parts_rows":
|
case "parts_rows":
|
||||||
result = augmentWithAutogeneratedParts(result, autogenPartsInventory(entries))
|
result = augmentWithAutogeneratedParts(result, autogenPartsInventory(entries))
|
||||||
case "accessory_visualeffects":
|
case "accessory_visualeffects":
|
||||||
result, err = augmentWithAutogeneratedHeadVisualeffects(result, entries, consumer, manifest.HeadVisualeffects)
|
result, err = augmentWithAutogeneratedAccessoryVisualeffects(result, entries, consumer, manifest.AccessoryVisualeffects)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -178,7 +178,7 @@ func preserveAutogenConsumerLockEntries(collected []nativeCollectedDataset, cons
|
|||||||
func autogenConsumerManagedLockKeyMatcher(consumer project.AutogenConsumerConfig) func(string) bool {
|
func autogenConsumerManagedLockKeyMatcher(consumer project.AutogenConsumerConfig) func(string) bool {
|
||||||
switch consumer.Mode {
|
switch consumer.Mode {
|
||||||
case "accessory_visualeffects":
|
case "accessory_visualeffects":
|
||||||
policy := resolveHeadVisualeffectsPolicy(consumer, nil)
|
policy := resolveAccessoryVisualeffectsPolicy(consumer, nil)
|
||||||
delimiter := policy.Delimiter
|
delimiter := policy.Delimiter
|
||||||
if delimiter == "" {
|
if delimiter == "" {
|
||||||
delimiter = "/"
|
delimiter = "/"
|
||||||
@@ -186,7 +186,7 @@ func autogenConsumerManagedLockKeyMatcher(consumer project.AutogenConsumerConfig
|
|||||||
prefix := "visualeffects:"
|
prefix := "visualeffects:"
|
||||||
groups := make(map[string]struct{}, len(policy.Groups))
|
groups := make(map[string]struct{}, len(policy.Groups))
|
||||||
for group, groupPolicy := range 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) != "" {
|
if strings.TrimSpace(token) != "" {
|
||||||
groups[token] = struct{}{}
|
groups[token] = struct{}{}
|
||||||
}
|
}
|
||||||
@@ -816,12 +816,12 @@ func augmentWithAutogeneratedCachedModels(collected []nativeCollectedDataset, en
|
|||||||
return result, nil
|
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 {
|
if len(entries) == 0 {
|
||||||
return collected, nil
|
return collected, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
policy := resolveHeadVisualeffectsPolicy(consumer, manifestPolicy)
|
policy := resolveAccessoryVisualeffectsPolicy(consumer, manifestPolicy)
|
||||||
result := append([]nativeCollectedDataset(nil), collected...)
|
result := append([]nativeCollectedDataset(nil), collected...)
|
||||||
for i, dataset := range result {
|
for i, dataset := range result {
|
||||||
if dataset.Dataset.Name != "visualeffects" {
|
if dataset.Dataset.Name != "visualeffects" {
|
||||||
@@ -871,12 +871,12 @@ func augmentWithAutogeneratedHeadVisualeffects(collected []nativeCollectedDatase
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, entry := range entries {
|
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 {
|
if !ok {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if existing, exists := rowByKey[key]; exists {
|
if existing, exists := rowByKey[key]; exists {
|
||||||
applyDiscoveredHeadVisualeffectDefaults(existing, dataset.Columns, modelStem, label, policy, groupPolicy)
|
applyDiscoveredAccessoryVisualeffectDefaults(existing, dataset.Columns, modelStem, label, policy, groupPolicy)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -889,7 +889,7 @@ func augmentWithAutogeneratedHeadVisualeffects(collected []nativeCollectedDatase
|
|||||||
}
|
}
|
||||||
lockData[key] = rowID
|
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)
|
rows = append(rows, newRow)
|
||||||
rowByKey[key] = newRow
|
rowByKey[key] = newRow
|
||||||
}
|
}
|
||||||
@@ -912,8 +912,8 @@ func nextAvailableAutogenID(used map[int]struct{}) int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type headVisualeffectsPolicy struct {
|
type accessoryVisualeffectsPolicy struct {
|
||||||
Groups map[string]headVisualeffectsGroupPolicy
|
Groups map[string]accessoryVisualeffectsGroupPolicy
|
||||||
GroupTokenSource string
|
GroupTokenSource string
|
||||||
CategoryFrom string
|
CategoryFrom string
|
||||||
Delimiter string
|
Delimiter string
|
||||||
@@ -925,22 +925,22 @@ type headVisualeffectsPolicy struct {
|
|||||||
RowDefaults map[string]string
|
RowDefaults map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
type headVisualeffectsGroupPolicy struct {
|
type accessoryVisualeffectsGroupPolicy struct {
|
||||||
Prefix string
|
Prefix string
|
||||||
ModelColumns []string
|
ModelColumns []string
|
||||||
RowDefaults map[string]string
|
RowDefaults map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
func resolveHeadVisualeffectsPolicy(consumer project.AutogenConsumerConfig, manifestPolicy *project.HeadVisualeffectsConfig) headVisualeffectsPolicy {
|
func resolveAccessoryVisualeffectsPolicy(consumer project.AutogenConsumerConfig, manifestPolicy *project.AccessoryVisualeffectsConfig) accessoryVisualeffectsPolicy {
|
||||||
policy := defaultHeadVisualeffectsPolicy()
|
policy := defaultAccessoryVisualeffectsPolicy()
|
||||||
if manifestPolicy != nil {
|
if manifestPolicy != nil {
|
||||||
applyHeadVisualeffectsConfig(&policy, *manifestPolicy)
|
applyAccessoryVisualeffectsConfig(&policy, *manifestPolicy)
|
||||||
}
|
}
|
||||||
applyHeadVisualeffectsConfig(&policy, consumer.HeadVisualeffects)
|
applyAccessoryVisualeffectsConfig(&policy, consumer.AccessoryVisualeffects)
|
||||||
return policy
|
return policy
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyHeadVisualeffectsConfig(policy *headVisualeffectsPolicy, cfg project.HeadVisualeffectsConfig) {
|
func applyAccessoryVisualeffectsConfig(policy *accessoryVisualeffectsPolicy, cfg project.AccessoryVisualeffectsConfig) {
|
||||||
for group, groupCfg := range cfg.Groups {
|
for group, groupCfg := range cfg.Groups {
|
||||||
group = strings.TrimSpace(group)
|
group = strings.TrimSpace(group)
|
||||||
prefix := strings.TrimSpace(groupCfg.Prefix)
|
prefix := strings.TrimSpace(groupCfg.Prefix)
|
||||||
@@ -951,13 +951,13 @@ func applyHeadVisualeffectsConfig(policy *headVisualeffectsPolicy, cfg project.H
|
|||||||
if prefix != "" {
|
if prefix != "" {
|
||||||
groupPolicy.Prefix = 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
|
groupPolicy.ModelColumns = columns
|
||||||
}
|
}
|
||||||
if groupPolicy.RowDefaults == nil {
|
if groupPolicy.RowDefaults == nil {
|
||||||
groupPolicy.RowDefaults = map[string]string{}
|
groupPolicy.RowDefaults = map[string]string{}
|
||||||
}
|
}
|
||||||
mergeStringMap(groupPolicy.RowDefaults, normalizeHeadVisualeffectsRowDefaults(groupCfg.RowDefaults))
|
mergeStringMap(groupPolicy.RowDefaults, normalizeAccessoryVisualeffectsRowDefaults(groupCfg.RowDefaults))
|
||||||
policy.Groups[group] = groupPolicy
|
policy.Groups[group] = groupPolicy
|
||||||
}
|
}
|
||||||
if strings.TrimSpace(cfg.GroupTokenSource) != "" {
|
if strings.TrimSpace(cfg.GroupTokenSource) != "" {
|
||||||
@@ -984,12 +984,12 @@ func applyHeadVisualeffectsConfig(policy *headVisualeffectsPolicy, cfg project.H
|
|||||||
if strings.TrimSpace(cfg.ModelColumn) != "" {
|
if strings.TrimSpace(cfg.ModelColumn) != "" {
|
||||||
policy.ModelColumn = 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 {
|
func defaultAccessoryVisualeffectsPolicy() accessoryVisualeffectsPolicy {
|
||||||
return headVisualeffectsPolicy{
|
return accessoryVisualeffectsPolicy{
|
||||||
Groups: map[string]headVisualeffectsGroupPolicy{
|
Groups: map[string]accessoryVisualeffectsGroupPolicy{
|
||||||
"chest_accessories": {},
|
"chest_accessories": {},
|
||||||
"head_accessories": {},
|
"head_accessories": {},
|
||||||
"head_decorations": {},
|
"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
|
var result []string
|
||||||
if column := strings.TrimSpace(modelColumn); column != "" {
|
if column := strings.TrimSpace(modelColumn); column != "" {
|
||||||
result = append(result, column)
|
result = append(result, column)
|
||||||
@@ -1028,7 +1028,7 @@ func normalizeHeadVisualeffectsModelColumns(modelColumn string, modelColumns []s
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func normalizeHeadVisualeffectsRowDefaults(defaults map[string]string) map[string]string {
|
func normalizeAccessoryVisualeffectsRowDefaults(defaults map[string]string) map[string]string {
|
||||||
result := map[string]string{}
|
result := map[string]string{}
|
||||||
for column, value := range defaults {
|
for column, value := range defaults {
|
||||||
column = strings.TrimSpace(column)
|
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) {
|
func accessoryVisualeffectIdentity(dataset string, entry autogenManifestEntry, policy accessoryVisualeffectsPolicy) (string, string, string, accessoryVisualeffectsGroupPolicy, bool) {
|
||||||
entry = normalizeHeadVisualeffectEntry(entry)
|
entry = normalizeAccessoryVisualeffectEntry(entry)
|
||||||
group, ok := policy.Groups[entry.Group]
|
group, ok := policy.Groups[entry.Group]
|
||||||
if !ok || strings.TrimSpace(entry.ModelStem) == "" {
|
if !ok || strings.TrimSpace(entry.ModelStem) == "" {
|
||||||
return "", "", "", headVisualeffectsGroupPolicy{}, false
|
return "", "", "", accessoryVisualeffectsGroupPolicy{}, false
|
||||||
}
|
}
|
||||||
modelStem := strings.TrimSpace(entry.ModelStem)
|
modelStem := strings.TrimSpace(entry.ModelStem)
|
||||||
stem := stripHeadVisualeffectModelPrefix(modelStem, policy)
|
stem := stripAccessoryVisualeffectModelPrefix(modelStem, policy)
|
||||||
stem = strings.TrimSpace(stem)
|
stem = strings.TrimSpace(stem)
|
||||||
if stem == "" {
|
if stem == "" {
|
||||||
return "", "", "", headVisualeffectsGroupPolicy{}, false
|
return "", "", "", accessoryVisualeffectsGroupPolicy{}, false
|
||||||
}
|
}
|
||||||
category := headVisualeffectCategory(entry, policy)
|
category := accessoryVisualeffectCategory(entry, policy)
|
||||||
groupToken := headVisualeffectGroupToken(entry.Group, group, policy)
|
groupToken := accessoryVisualeffectGroupToken(entry.Group, group, policy)
|
||||||
values := map[string]string{
|
values := map[string]string{
|
||||||
"dataset": dataset,
|
"dataset": dataset,
|
||||||
"group": applyHeadVisualeffectCase(groupToken, policy),
|
"group": applyAccessoryVisualeffectCase(groupToken, policy),
|
||||||
"group_raw": entry.Group,
|
"group_raw": entry.Group,
|
||||||
"prefix": applyHeadVisualeffectCase(group.Prefix, policy),
|
"prefix": applyAccessoryVisualeffectCase(group.Prefix, policy),
|
||||||
"category": applyHeadVisualeffectCase(category, policy),
|
"category": applyAccessoryVisualeffectCase(category, policy),
|
||||||
"category_upper": strings.ToUpper(category),
|
"category_upper": strings.ToUpper(category),
|
||||||
"category_segment": headVisualeffectDelimitedSegment(applyHeadVisualeffectCase(category, policy), policy.Delimiter),
|
"category_segment": accessoryVisualeffectDelimitedSegment(applyAccessoryVisualeffectCase(category, policy), policy.Delimiter),
|
||||||
"category_segment_upper": headVisualeffectDelimitedSegment(strings.ToUpper(category), policy.Delimiter),
|
"category_segment_upper": accessoryVisualeffectDelimitedSegment(strings.ToUpper(category), policy.Delimiter),
|
||||||
"subgroup": applyHeadVisualeffectCase(entry.Subgroup, policy),
|
"subgroup": applyAccessoryVisualeffectCase(entry.Subgroup, policy),
|
||||||
"stem": applyHeadVisualeffectCase(stem, policy),
|
"stem": applyAccessoryVisualeffectCase(stem, policy),
|
||||||
"stem_upper": strings.ToUpper(stem),
|
"stem_upper": strings.ToUpper(stem),
|
||||||
"model_stem": modelStem,
|
"model_stem": modelStem,
|
||||||
"delimiter": policy.Delimiter,
|
"delimiter": policy.Delimiter,
|
||||||
}
|
}
|
||||||
key := expandHeadVisualeffectsFormat(policy.KeyFormat, values)
|
key := expandAccessoryVisualeffectsFormat(policy.KeyFormat, values)
|
||||||
label := expandHeadVisualeffectsFormat(policy.LabelFormat, values)
|
label := expandAccessoryVisualeffectsFormat(policy.LabelFormat, values)
|
||||||
if strings.TrimSpace(key) == "" || strings.TrimSpace(label) == "" {
|
if strings.TrimSpace(key) == "" || strings.TrimSpace(label) == "" {
|
||||||
return "", "", "", headVisualeffectsGroupPolicy{}, false
|
return "", "", "", accessoryVisualeffectsGroupPolicy{}, false
|
||||||
}
|
}
|
||||||
return key, label, modelStem, group, true
|
return key, label, modelStem, group, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func normalizeHeadVisualeffectEntry(entry autogenManifestEntry) autogenManifestEntry {
|
func normalizeAccessoryVisualeffectEntry(entry autogenManifestEntry) autogenManifestEntry {
|
||||||
entry.Group = strings.TrimSpace(entry.Group)
|
entry.Group = strings.TrimSpace(entry.Group)
|
||||||
if strings.TrimSpace(entry.Group) == "" && strings.TrimSpace(entry.Source) != "" {
|
if strings.TrimSpace(entry.Group) == "" && strings.TrimSpace(entry.Source) != "" {
|
||||||
parts := strings.Split(filepath.ToSlash(entry.Source), "/")
|
parts := strings.Split(filepath.ToSlash(entry.Source), "/")
|
||||||
@@ -1106,7 +1106,7 @@ func normalizeHeadVisualeffectEntry(entry autogenManifestEntry) autogenManifestE
|
|||||||
return entry
|
return entry
|
||||||
}
|
}
|
||||||
|
|
||||||
func stripHeadVisualeffectModelPrefix(modelStem string, policy headVisualeffectsPolicy) string {
|
func stripAccessoryVisualeffectModelPrefix(modelStem string, policy accessoryVisualeffectsPolicy) string {
|
||||||
stem := modelStem
|
stem := modelStem
|
||||||
for _, prefix := range policy.StripModelPrefixes {
|
for _, prefix := range policy.StripModelPrefixes {
|
||||||
prefix = strings.TrimSpace(prefix)
|
prefix = strings.TrimSpace(prefix)
|
||||||
@@ -1118,7 +1118,7 @@ func stripHeadVisualeffectModelPrefix(modelStem string, policy headVisualeffects
|
|||||||
return stem
|
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" {
|
if policy.GroupTokenSource == "folder_name" {
|
||||||
return groupName
|
return groupName
|
||||||
}
|
}
|
||||||
@@ -1128,7 +1128,7 @@ func headVisualeffectGroupToken(groupName string, group headVisualeffectsGroupPo
|
|||||||
return groupName
|
return groupName
|
||||||
}
|
}
|
||||||
|
|
||||||
func headVisualeffectCategory(entry autogenManifestEntry, policy headVisualeffectsPolicy) string {
|
func accessoryVisualeffectCategory(entry autogenManifestEntry, policy accessoryVisualeffectsPolicy) string {
|
||||||
switch policy.CategoryFrom {
|
switch policy.CategoryFrom {
|
||||||
case "immediate_parent":
|
case "immediate_parent":
|
||||||
return strings.TrimSpace(entry.Category)
|
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) == "" {
|
if strings.TrimSpace(value) == "" {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
return value + delimiter
|
return value + delimiter
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyHeadVisualeffectCase(value string, policy headVisualeffectsPolicy) string {
|
func applyAccessoryVisualeffectCase(value string, policy accessoryVisualeffectsPolicy) string {
|
||||||
switch policy.Case {
|
switch policy.Case {
|
||||||
case "lower":
|
case "lower":
|
||||||
return strings.ToLower(value)
|
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
|
result := format
|
||||||
for key, value := range values {
|
for key, value := range values {
|
||||||
result = strings.ReplaceAll(result, "{"+key+"}", value)
|
result = strings.ReplaceAll(result, "{"+key+"}", value)
|
||||||
@@ -1165,7 +1165,7 @@ func expandHeadVisualeffectsFormat(format string, values map[string]string) stri
|
|||||||
return result
|
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{
|
row := map[string]any{
|
||||||
"id": rowID,
|
"id": rowID,
|
||||||
"key": key,
|
"key": key,
|
||||||
@@ -1180,13 +1180,13 @@ func createDefaultHeadVisualeffectRow(columns []string, rowID int, key, label, m
|
|||||||
for column, value := range group.RowDefaults {
|
for column, value := range group.RowDefaults {
|
||||||
row[column] = value
|
row[column] = value
|
||||||
}
|
}
|
||||||
for _, column := range headVisualeffectModelColumns(policy, group) {
|
for _, column := range accessoryVisualeffectModelColumns(policy, group) {
|
||||||
row[column] = modelStem
|
row[column] = modelStem
|
||||||
}
|
}
|
||||||
return row
|
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"]) {
|
if isNullLikeValue(row["Label"]) {
|
||||||
row["Label"] = label
|
row["Label"] = label
|
||||||
}
|
}
|
||||||
@@ -1200,7 +1200,7 @@ func applyDiscoveredHeadVisualeffectDefaults(row map[string]any, columns []strin
|
|||||||
row[column] = value
|
row[column] = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, column := range headVisualeffectModelColumns(policy, group) {
|
for _, column := range accessoryVisualeffectModelColumns(policy, group) {
|
||||||
if isNullLikeValue(row[column]) {
|
if isNullLikeValue(row[column]) {
|
||||||
row[column] = modelStem
|
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 {
|
if len(group.ModelColumns) > 0 {
|
||||||
return group.ModelColumns
|
return group.ModelColumns
|
||||||
}
|
}
|
||||||
@@ -1230,14 +1230,14 @@ func formatAutogenManifest(root string, producer project.AutogenProducerConfig,
|
|||||||
GeneratedAt: time.Now().UTC().Format(time.RFC3339),
|
GeneratedAt: time.Now().UTC().Format(time.RFC3339),
|
||||||
Entries: entries,
|
Entries: entries,
|
||||||
}
|
}
|
||||||
if autogenHeadVisualeffectsConfigConfigured(producer.HeadVisualeffects) {
|
if autogenAccessoryVisualeffectsConfigConfigured(producer.AccessoryVisualeffects) {
|
||||||
cfg := producer.HeadVisualeffects
|
cfg := producer.AccessoryVisualeffects
|
||||||
manifest.HeadVisualeffects = &cfg
|
manifest.AccessoryVisualeffects = &cfg
|
||||||
}
|
}
|
||||||
return json.MarshalIndent(manifest, "", " ")
|
return json.MarshalIndent(manifest, "", " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
func autogenHeadVisualeffectsConfigConfigured(cfg project.HeadVisualeffectsConfig) bool {
|
func autogenAccessoryVisualeffectsConfigConfigured(cfg project.AccessoryVisualeffectsConfig) bool {
|
||||||
return len(cfg.Groups) > 0 ||
|
return len(cfg.Groups) > 0 ||
|
||||||
strings.TrimSpace(cfg.GroupTokenSource) != "" ||
|
strings.TrimSpace(cfg.GroupTokenSource) != "" ||
|
||||||
strings.TrimSpace(cfg.CategoryFrom) != "" ||
|
strings.TrimSpace(cfg.CategoryFrom) != "" ||
|
||||||
|
|||||||
@@ -7633,7 +7633,7 @@ func TestApplyAutogenConsumersAugmentsPartsFromLocalOverride(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestApplyAutogenConsumersAugmentsHeadVisualeffectsFromLocalOverride(t *testing.T) {
|
func TestApplyAutogenConsumersAugmentsAccessoryVisualeffectsFromLocalOverride(t *testing.T) {
|
||||||
root := testProjectRoot(t)
|
root := testProjectRoot(t)
|
||||||
overrideRoot := filepath.Join(root, "autogen-assets")
|
overrideRoot := filepath.Join(root, "autogen-assets")
|
||||||
mkdirAll(t, filepath.Join(overrideRoot, "vfxs", "head_accessories", "hat"))
|
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)
|
root := testProjectRoot(t)
|
||||||
overrideRoot := filepath.Join(root, "autogen-assets")
|
overrideRoot := filepath.Join(root, "autogen-assets")
|
||||||
mkdirAll(t, filepath.Join(overrideRoot, "vfxs", "head_features", "sinfar", "ears_plt"))
|
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"},
|
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"},
|
Manifest: project.AutogenManifestConfig{ReleaseTag: "head-vfx-manifest-current", AssetName: "sow-accessory-vfx-manifest.json", CacheName: "sow-accessory-vfx-manifest.json"},
|
||||||
LocalOverrideRoot: "autogen-assets",
|
LocalOverrideRoot: "autogen-assets",
|
||||||
HeadVisualeffects: project.HeadVisualeffectsConfig{
|
AccessoryVisualeffects: project.AccessoryVisualeffectsConfig{
|
||||||
Groups: map[string]project.HeadVisualeffectGroupConfig{
|
Groups: map[string]project.AccessoryVisualeffectGroupConfig{
|
||||||
"head_features": {
|
"head_features": {
|
||||||
ModelColumns: []string{"Imp_HeadCon_Node", "Imp_Root_H_Node"},
|
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()
|
root := t.TempDir()
|
||||||
mkdirAll(t, filepath.Join(root, "src"))
|
mkdirAll(t, filepath.Join(root, "src"))
|
||||||
mkdirAll(t, filepath.Join(root, "build"))
|
mkdirAll(t, filepath.Join(root, "build"))
|
||||||
@@ -7878,7 +7878,7 @@ autogen:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBuildGenerated2DAAssetsAppendsCachedModelsFromHeadVisualeffects(t *testing.T) {
|
func TestBuildGenerated2DAAssetsAppendsCachedModelsFromAccessoryVisualeffects(t *testing.T) {
|
||||||
root := testProjectRoot(t)
|
root := testProjectRoot(t)
|
||||||
mkdirAll(t, filepath.Join(root, "assets", "vfxs", "chest_accessories"))
|
mkdirAll(t, filepath.Join(root, "assets", "vfxs", "chest_accessories"))
|
||||||
mkdirAll(t, filepath.Join(root, "assets", "vfxs", "head_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()
|
root := t.TempDir()
|
||||||
projRoot := filepath.Join(root, "project")
|
projRoot := filepath.Join(root, "project")
|
||||||
mkdirAll(t, filepath.Join(projRoot, "src"))
|
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()
|
root := t.TempDir()
|
||||||
projRoot := filepath.Join(root, "project")
|
projRoot := filepath.Join(root, "project")
|
||||||
mkdirAll(t, filepath.Join(projRoot, "src"))
|
mkdirAll(t, filepath.Join(projRoot, "src"))
|
||||||
|
|||||||
Reference in New Issue
Block a user