Accessories unhardcoded
This commit is contained in:
@@ -7278,8 +7278,10 @@ func TestApplyAutogenConsumersAugmentsHeadVisualeffectsFromLocalOverride(t *test
|
||||
root := testProjectRoot(t)
|
||||
overrideRoot := filepath.Join(root, "autogen-assets")
|
||||
mkdirAll(t, filepath.Join(overrideRoot, "vfxs", "head_accessories"))
|
||||
mkdirAll(t, filepath.Join(overrideRoot, "vfxs", "head_decorations"))
|
||||
mkdirAll(t, filepath.Join(overrideRoot, "vfxs", "head_features", "hair"))
|
||||
writeFile(t, filepath.Join(overrideRoot, "vfxs", "head_accessories", "hfx_bandana.mdl"), "mdl\n")
|
||||
writeFile(t, filepath.Join(overrideRoot, "vfxs", "head_decorations", "hfx_laurel.mdl"), "mdl\n")
|
||||
writeFile(t, filepath.Join(overrideRoot, "vfxs", "head_features", "hair", "hfx_hair_bangs.mdl"), "mdl\n")
|
||||
|
||||
p := testProject(root)
|
||||
@@ -7290,7 +7292,7 @@ func TestApplyAutogenConsumersAugmentsHeadVisualeffectsFromLocalOverride(t *test
|
||||
Dataset: "visualeffects",
|
||||
Mode: "head_visualeffects",
|
||||
Root: "vfxs",
|
||||
Include: []string{"head_accessories/**/*.mdl", "head_features/**/*.mdl"},
|
||||
Include: []string{"head_accessories/**/*.mdl", "head_decorations/**/*.mdl", "head_features/**/*.mdl"},
|
||||
Derive: project.AutogenDeriveConfig{Kind: "model_stem", GroupFrom: "first_path_segment"},
|
||||
Manifest: project.AutogenManifestConfig{ReleaseTag: "head-vfx-manifest-current", AssetName: "sow-head-vfx-manifest.json", CacheName: "sow-head-vfx-manifest.json"},
|
||||
LocalOverrideRoot: "autogen-assets",
|
||||
@@ -7312,7 +7314,7 @@ func TestApplyAutogenConsumersAugmentsHeadVisualeffectsFromLocalOverride(t *test
|
||||
if err != nil {
|
||||
t.Fatalf("applyAutogenConsumers failed: %v", err)
|
||||
}
|
||||
if len(got) != 1 || len(got[0].Rows) != 2 {
|
||||
if len(got) != 1 || len(got[0].Rows) != 3 {
|
||||
t.Fatalf("expected autogenerated visualeffects rows, got %#v", got)
|
||||
}
|
||||
|
||||
@@ -7329,6 +7331,14 @@ func TestApplyAutogenConsumersAugmentsHeadVisualeffectsFromLocalOverride(t *test
|
||||
t.Fatalf("unexpected head accessory defaults: %#v", bandana)
|
||||
}
|
||||
|
||||
laurel := rowByKey["visualeffects:headdecoration_laurel"]
|
||||
if laurel == nil {
|
||||
t.Fatalf("expected head decoration row, got %#v", got[0].Rows)
|
||||
}
|
||||
if laurel["Label"] != "headdecoration_LAUREL" || laurel["Imp_HeadCon_Node"] != "hfx_laurel" || laurel["Type_FD"] != "D" {
|
||||
t.Fatalf("unexpected head decoration defaults: %#v", laurel)
|
||||
}
|
||||
|
||||
hair := rowByKey["visualeffects:headfeature_hair_bangs"]
|
||||
if hair == nil {
|
||||
t.Fatalf("expected head feature row, got %#v", got[0].Rows)
|
||||
@@ -7340,18 +7350,113 @@ func TestApplyAutogenConsumersAugmentsHeadVisualeffectsFromLocalOverride(t *test
|
||||
if _, ok := got[0].LockData["visualeffects:headaccessory_bandana"]; !ok {
|
||||
t.Fatalf("expected head accessory lock id, got %#v", got[0].LockData)
|
||||
}
|
||||
if _, ok := got[0].LockData["visualeffects:headdecoration_laurel"]; !ok {
|
||||
t.Fatalf("expected head decoration lock id, got %#v", got[0].LockData)
|
||||
}
|
||||
if _, ok := got[0].LockData["visualeffects:headfeature_hair_bangs"]; !ok {
|
||||
t.Fatalf("expected head feature lock id, got %#v", got[0].LockData)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildNativeUsesConfiguredHeadVisualeffectsGroups(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
mkdirAll(t, filepath.Join(root, "src"))
|
||||
mkdirAll(t, filepath.Join(root, "build"))
|
||||
mkdirAll(t, filepath.Join(root, "topdata", "data", "visualeffects"))
|
||||
mkdirAll(t, filepath.Join(root, "autogen-assets", "vfxs", "chest_accessories"))
|
||||
mkdirAll(t, filepath.Join(root, "autogen-assets", "vfxs", "head_jewels"))
|
||||
writeFile(t, filepath.Join(root, "topdata", "base_dialog.json"), "{}\n")
|
||||
writeFile(t, filepath.Join(root, "topdata", "data", "visualeffects", "base.json"), `{
|
||||
"output": "visualeffects.2da",
|
||||
"columns": ["Label", "Type_FD", "OrientWithGround", "Imp_HeadCon_Node", "Imp_Root_S_Node", "Imp_Root_M_Node", "Imp_Root_L_Node", "Imp_Root_H_Node", "OrientWithObject"],
|
||||
"rows": []
|
||||
}`+"\n")
|
||||
writeFile(t, filepath.Join(root, "autogen-assets", "vfxs", "chest_accessories", "tfx_sash.mdl"), "mdl\n")
|
||||
writeFile(t, filepath.Join(root, "autogen-assets", "vfxs", "head_jewels", "hfx_circlet.mdl"), "mdl\n")
|
||||
writeFile(t, filepath.Join(root, "nwn-tool.yaml"), `
|
||||
module:
|
||||
name: Test
|
||||
resref: test
|
||||
paths:
|
||||
source: src
|
||||
build: build
|
||||
topdata:
|
||||
source: topdata
|
||||
build: build/topdata
|
||||
autogen:
|
||||
consumers:
|
||||
- id: head_visualeffects
|
||||
producer: head_visualeffects
|
||||
dataset: visualeffects
|
||||
mode: head_visualeffects
|
||||
root: vfxs
|
||||
include:
|
||||
- chest_accessories/**/*.mdl
|
||||
- head_jewels/**/*.mdl
|
||||
derive:
|
||||
kind: model_stem
|
||||
group_from: first_path_segment
|
||||
manifest:
|
||||
release_tag: head-vfx-manifest-current
|
||||
asset_name: sow-head-vfx-manifest.json
|
||||
cache_name: sow-head-vfx-manifest.json
|
||||
local_override_root: autogen-assets
|
||||
head_visualeffects:
|
||||
groups:
|
||||
chest_accessories:
|
||||
prefix: chestaccessory
|
||||
model_columns:
|
||||
- Imp_Root_S_Node
|
||||
- Imp_Root_M_Node
|
||||
- Imp_Root_L_Node
|
||||
- Imp_Root_H_Node
|
||||
head_jewels:
|
||||
prefix: headjewel
|
||||
label_format: "{prefix}_{stem}"
|
||||
strip_model_prefixes:
|
||||
- hfx_
|
||||
- tfx_
|
||||
row_defaults:
|
||||
Type_FD: F
|
||||
OrientWithGround: "0"
|
||||
OrientWithObject: "0"
|
||||
`)
|
||||
|
||||
proj, err := project.Load(root)
|
||||
if err != nil {
|
||||
t.Fatalf("load project: %v", err)
|
||||
}
|
||||
|
||||
result, err := BuildNative(proj, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("BuildNative failed: %v", err)
|
||||
}
|
||||
visualeffectsBytes, err := os.ReadFile(filepath.Join(result.Output2DADir, "visualeffects.2da"))
|
||||
if err != nil {
|
||||
t.Fatalf("read visualeffects.2da: %v", err)
|
||||
}
|
||||
text := string(visualeffectsBytes)
|
||||
for _, want := range []string{
|
||||
"0\tchestaccessory_sash\tF\t0\t****\ttfx_sash\ttfx_sash\ttfx_sash\ttfx_sash\t0",
|
||||
"1\theadjewel_circlet\tF\t0\thfx_circlet\t****\t****\t****\t****\t0",
|
||||
} {
|
||||
if !strings.Contains(text, want) {
|
||||
t.Fatalf("expected configured visualeffects output to contain %q, got:\n%s", want, text)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildGenerated2DAAssetsAppendsCachedModelsFromHeadVisualeffects(t *testing.T) {
|
||||
root := testProjectRoot(t)
|
||||
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_decorations"))
|
||||
mkdirAll(t, filepath.Join(root, "assets", "vfxs", "head_features", "hair"))
|
||||
mkdirAll(t, filepath.Join(root, "topdata", "data", "cachedmodels"))
|
||||
writeFile(t, filepath.Join(root, "assets", "vfxs", "chest_accessories", "tfx_sash.mdl"), "mdl\n")
|
||||
writeFile(t, filepath.Join(root, "assets", "vfxs", "head_accessories", "hfx_bandana.mdl"), "mdl\n")
|
||||
writeFile(t, filepath.Join(root, "assets", "vfxs", "head_accessories", "hfx_existing.mdl"), "mdl\n")
|
||||
writeFile(t, filepath.Join(root, "assets", "vfxs", "head_decorations", "hfx_laurel.mdl"), "mdl\n")
|
||||
writeFile(t, filepath.Join(root, "assets", "vfxs", "head_features", "hair", "hfx_hair_bangs.mdl"), "mdl\n")
|
||||
writeFile(t, filepath.Join(root, "topdata", "data", "cachedmodels", "base.json"), `{
|
||||
"columns": ["Model"],
|
||||
@@ -7374,7 +7479,7 @@ func TestBuildGenerated2DAAssetsAppendsCachedModelsFromHeadVisualeffects(t *test
|
||||
ID: "cachedmodels",
|
||||
Mode: "cachedmodels_rows",
|
||||
Root: "vfxs",
|
||||
Include: []string{"head_accessories/**/*.mdl", "head_features/**/*.mdl"},
|
||||
Include: []string{"chest_accessories/**/*.mdl", "head_accessories/**/*.mdl", "head_decorations/**/*.mdl", "head_features/**/*.mdl"},
|
||||
Derive: project.AutogenDeriveConfig{Kind: "model_stem", GroupFrom: "first_path_segment"},
|
||||
},
|
||||
},
|
||||
@@ -7398,8 +7503,10 @@ func TestBuildGenerated2DAAssetsAppendsCachedModelsFromHeadVisualeffects(t *test
|
||||
for _, want := range []string{
|
||||
"0\tgrn_m_bone",
|
||||
"1\thfx_existing",
|
||||
"2\thfx_bandana",
|
||||
"3\thfx_hair_bangs",
|
||||
"2\ttfx_sash",
|
||||
"3\thfx_bandana",
|
||||
"4\thfx_laurel",
|
||||
"5\thfx_hair_bangs",
|
||||
} {
|
||||
if !strings.Contains(text, want) {
|
||||
t.Fatalf("expected generated cachedmodels output to contain %q, got:\n%s", want, text)
|
||||
|
||||
Reference in New Issue
Block a user