Skip to content

Commit 2489e3b

Browse files
authored
Merge pull request #82 from argonui/state_4
Object State handling
2 parents ce15874 + 768f869 commit 2489e3b

5 files changed

Lines changed: 424 additions & 41 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
TTSModManager.exe
22
bash.exe.stackdump
3+
oryxBuildBinary

file/conversions.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,36 @@ func ForceParseIntoStrArray(m *types.J, k string, dest *[]string) error {
5959
return nil
6060
}
6161

62+
func TryParseIntoStrMap(m *types.J, k string, dest *map[string]string) {
63+
_ = ForceParseIntoStrMap(m, k, dest)
64+
}
65+
66+
func ForceParseIntoStrMap(m *types.J, k string, dest *map[string]string) error {
67+
raw, ok := (*m)[k]
68+
if !ok {
69+
return fmt.Errorf("key %s not found", k)
70+
}
71+
if rawmapstrings, ok := raw.(map[string]string); ok {
72+
*dest = rawmapstrings
73+
delete((*m), k)
74+
return nil
75+
}
76+
if rawmap, ok := raw.(map[string]any); ok {
77+
massaged := map[string]string{}
78+
for k, v := range rawmap {
79+
vstr, ok := v.(string)
80+
if !ok {
81+
return fmt.Errorf("m[%s] of type %T, not string", k, v)
82+
}
83+
massaged[k] = vstr
84+
}
85+
*dest = massaged
86+
delete((*m), k)
87+
return nil
88+
}
89+
return fmt.Errorf("key %s was not type map[string]string, was %T", k, raw)
90+
}
91+
6292
// TryParseIntoInt will not throw error
6393
func TryParseIntoInt(m *types.J, k string, dest *int64) {
6494
_ = ForceParseIntoInt(m, k, dest)

mod/generate_test.go

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,147 @@ func TestGenerate(t *testing.T) {
5454
"DecalPallet": nil,
5555
},
5656
},
57+
{
58+
name: "Object State recursive",
59+
inputRoot: map[string]interface{}{
60+
"SaveName": "cool mod",
61+
"ObjectStates_order": []interface{}{"parent"},
62+
},
63+
inputLuaSrc: map[string]string{
64+
"parent/eda22b/childstate2.ttslua": "var foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\n",
65+
},
66+
inputOjbs: map[string]types.J{
67+
"parent.json": map[string]interface{}{
68+
"GUID": "parent",
69+
"States_path": map[string]interface{}{
70+
"2": "eda22b",
71+
},
72+
"ContainedObjects_path": "parent",
73+
},
74+
"parent/eda22b.json": map[string]interface{}{
75+
"GUID": "eda22b",
76+
"Autoraise": true,
77+
"ContainedObjects_path": "eda22b",
78+
"ContainedObjects_order": []string{"childstate2"},
79+
},
80+
"parent/eda22b/childstate2.json": map[string]interface{}{
81+
"Description": "child of state 2",
82+
"GUID": "childstate2",
83+
"LuaScript_path": "parent/eda22b/childstate2.ttslua",
84+
},
85+
},
86+
want: map[string]interface{}{
87+
"SaveName": "cool mod",
88+
"ObjectStates": []any{
89+
map[string]any{
90+
"GUID": "parent",
91+
"States": map[string]interface{}{
92+
"2": map[string]interface{}{
93+
"Autoraise": true,
94+
"GUID": "eda22b",
95+
"ContainedObjects": []any{
96+
map[string]any{
97+
"Description": "child of state 2",
98+
"GUID": "childstate2",
99+
"LuaScript": "var foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\nvar foo = 42\n",
100+
},
101+
},
102+
},
103+
},
104+
},
105+
},
106+
"CameraStates": nil,
107+
"ComponentTags": nil,
108+
"MusicPlayer": nil,
109+
"Sky": "",
110+
"TabStates": nil,
111+
"Note": "",
112+
"Table": "",
113+
"LuaScript": "",
114+
"LuaScriptState": "",
115+
"SnapPoints": nil,
116+
"XmlUI": "",
117+
"Turns": nil,
118+
"VersionNumber": "",
119+
"GameMode": "",
120+
"GameType": "",
121+
"Hands": nil,
122+
"Grid": nil,
123+
"Lighting": nil,
124+
"GameComplexity": "",
125+
"Decals": nil,
126+
"CustomUIAssets": nil,
127+
"DecalPallet": nil,
128+
},
129+
},
130+
{
131+
name: "Object State and contained object generation",
132+
inputRoot: map[string]interface{}{
133+
"SaveName": "cool mod",
134+
"ObjectStates_order": []interface{}{"parent"},
135+
},
136+
inputLuaSrc: map[string]string{},
137+
inputOjbs: map[string]types.J{
138+
"parent.json": map[string]interface{}{
139+
"GUID": "parent",
140+
"States_path": map[string]interface{}{
141+
"2": "state2",
142+
},
143+
"ContainedObjects_path": "parent",
144+
"ContainedObjects_order": []string{"co123"},
145+
},
146+
"parent/state2.json": map[string]interface{}{
147+
"GUID": "state2",
148+
"Autoraise": true,
149+
},
150+
"parent/co123.json": map[string]interface{}{
151+
"Description": "contained object",
152+
"GUID": "co123",
153+
},
154+
},
155+
want: map[string]interface{}{
156+
"SaveName": "cool mod",
157+
"ObjectStates": []any{
158+
map[string]any{
159+
"GUID": "parent",
160+
"States": map[string]interface{}{
161+
"2": map[string]interface{}{
162+
"Autoraise": true,
163+
"GUID": "state2",
164+
},
165+
},
166+
"ContainedObjects": []any{
167+
map[string]any{
168+
"GUID": "co123",
169+
"Description": "contained object",
170+
},
171+
},
172+
},
173+
},
174+
"CameraStates": nil,
175+
"ComponentTags": nil,
176+
"MusicPlayer": nil,
177+
"Sky": "",
178+
"TabStates": nil,
179+
"Note": "",
180+
"Table": "",
181+
"LuaScript": "",
182+
"LuaScriptState": "",
183+
"SnapPoints": nil,
184+
"XmlUI": "",
185+
"Turns": nil,
186+
"VersionNumber": "",
187+
"GameMode": "",
188+
"GameType": "",
189+
"Hands": nil,
190+
"Grid": nil,
191+
"Lighting": nil,
192+
"GameComplexity": "",
193+
"Decals": nil,
194+
"CustomUIAssets": nil,
195+
"DecalPallet": nil,
196+
},
197+
},
57198
} {
58199
t.Run(tc.name, func(t *testing.T) {
59200
rootff := &tests.FakeFiles{

0 commit comments

Comments
 (0)