net.dreditor.editor.utility.converting 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,438 +1,438 @@
1
- //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
- using DREditor.Doors;
3
- using DREditor.Editor;
4
- using DREditor.Progressing;
5
- using DREditor.RoomBuilding;
6
- using DREditor.RoomBuilding.Implementation;
7
- using DREditor.RoomBuilding.Implementation.Actors;
8
- using DREditor.RoomBuilding.Old;
9
- using DREditor.SubAreas;
10
- using DREditor.Talkables;
11
- using DREditor.Triggers;
12
- using System.Collections.Generic;
13
- using System.IO;
14
- using UnityEditor;
15
- using UnityEngine;
16
-
17
- namespace DREditor.Editor.Utility.Converting
18
- {
19
- /// <summary>
20
- ///
21
- /// </summary>
22
- public class ConvertRoomDataRegion
23
- {
24
- /// <summary>
25
- ///
26
- /// </summary>
27
- protected ProgressionDatabase pDB;
28
-
29
- /// <summary>
30
- ///
31
- /// </summary>
32
- protected RoomBuilder currentRoomBuilder;
33
-
34
- /// <summary>
35
- ///
36
- /// </summary>
37
- protected RoomSection currentRoomSection;
38
-
39
- /// <summary>
40
- ///
41
- /// </summary>
42
- protected RoomData currentRoomData;
43
-
44
- /// <summary>
45
- ///
46
- /// </summary>
47
- protected RoomStateBuilder currentRoomStateBuilder;
48
-
49
- /// <summary>
50
- ///
51
- /// </summary>
52
- protected RoomStateSection currentRoomStateSection;
53
-
54
-
55
- [MenuItem("DREditor/Convert/Convert First Room Data Builder")]
56
- public static void ConvertFirstRoomDataBuilders() => new ConvertRoomDataRegion().ConvertFirst();
57
-
58
- /// <summary>
59
- ///
60
- /// </summary>
61
- public virtual void ConvertFirst()
62
- {
63
- var roomBuilders = BuilderUtility.FindAssetsByType<RoomBuilder>();
64
-
65
- currentRoomBuilder = roomBuilders[0];
66
-
67
- CreateRoomStateBuilder(roomBuilders[0]);
68
- }
69
-
70
-
71
- [MenuItem("DREditor/Convert/Convert All Room Data Builders")]
72
- public static void ConvertAllRoomDataBuilders() => new ConvertRoomDataRegion().ConvertAll();
73
-
74
- /// <summary>
75
- ///
76
- /// </summary>
77
- public virtual void ConvertAll()
78
- {
79
- if (!DatabaseUtility.InitializeDatabase(pDB, out pDB))
80
- return;
81
-
82
- var roomBuilders = BuilderUtility.FindAssetsByType<RoomBuilder>();
83
-
84
- foreach (var roomBuilder in roomBuilders)
85
- CreateRoomStateBuilder(roomBuilder);
86
- }
87
-
88
- /// <summary>
89
- ///
90
- /// </summary>
91
- /// <param name="roomBuilder"></param>
92
- public virtual void CreateRoomStateBuilder(RoomBuilder roomBuilder)
93
- {
94
- currentRoomBuilder = roomBuilder;
95
-
96
- InitializeBuilder(roomBuilder.name.Replace(".asset", ""));
97
- }
98
-
99
- /// <summary>
100
- ///
101
- /// </summary>
102
- /// <param name="builderName"></param>
103
- protected virtual void InitializeBuilder(string builderName)
104
- {
105
- var builderAsset = ScriptableObject.CreateInstance<RoomStateBuilder>();
106
-
107
- string buildFolderPath = "Assets/RoomBuilding";
108
-
109
- if (!ConvertUtility.ProjectFolderExists(buildFolderPath))
110
- AssetDatabase.CreateFolder("Assets", "RoomBuilding");
111
-
112
- string buildFolder = AssetDatabase.CreateFolder(buildFolderPath, builderName);
113
-
114
- if (buildFolder == "")
115
- {
116
- UnityEngine.Debug.LogWarning("Could not create folder. Canceling Initialization.");
117
-
118
- UnityEngine.Debug.Log("Builder Path: " + buildFolderPath);
119
-
120
- return;
121
- }
122
-
123
- string newFolderPath = AssetDatabase.GUIDToAssetPath(buildFolder);
124
-
125
- AssetDatabase.CreateAsset(builderAsset, newFolderPath + "/" + builderName + ".asset");
126
-
127
- AssetDatabase.SaveAssets();
128
-
129
- EditorUtility.SetDirty(builderAsset);
130
-
131
- InitializeSections(builderAsset);
132
- }
133
-
134
- /// <summary>
135
- ///
136
- /// </summary>
137
- /// <param name="builder"></param>
138
- protected virtual void InitializeSections(RoomStateBuilder builder)
139
- {
140
- foreach (Chapter chapter in pDB.Chapters)
141
- {
142
- var sectionAsset = ScriptableObject.CreateInstance<RoomStateSection>();
143
-
144
- sectionAsset.SetChapter(chapter);
145
-
146
-
147
- string newAssetPath = CreateSectionAssetPath(chapter, builder);
148
-
149
- if (newAssetPath == "")
150
- return;
151
-
152
-
153
- AssetDatabase.CreateAsset(sectionAsset, newAssetPath);
154
-
155
- AssetDatabase.SaveAssets();
156
-
157
- EditorUtility.SetDirty(sectionAsset);
158
-
159
- builder.Sections.Add(sectionAsset);
160
-
161
- EditorUtility.SetDirty(builder);
162
- }
163
-
164
- currentRoomStateBuilder = builder;
165
-
166
- CreateDataAssets();
167
- }
168
-
169
- /// <summary>
170
- ///
171
- /// </summary>
172
- /// <param name="chapter"></param>
173
- /// <param name="builder"></param>
174
- /// <returns></returns>
175
- protected virtual string CreateSectionAssetPath(Chapter chapter, RoomStateBuilder builder)
176
- {
177
- string builderPath = AssetDatabase.GetAssetPath(builder);
178
-
179
- string builderPrefix = builder.name.Replace(".asset", "");
180
-
181
- string sectionPath = builderPath.Replace("/" + builder.name + ".asset", "");
182
-
183
- string sectionFolderName = builderPrefix + $"_{pDB.GetChapterIndex(chapter)}";
184
-
185
- string sectionFolder = AssetDatabase.CreateFolder(sectionPath, sectionFolderName);
186
-
187
- if (sectionFolder == "")
188
- {
189
- UnityEngine.Debug.LogWarning("Could not create folder. Canceling Initialization.");
190
-
191
- UnityEngine.Debug.Log("Builder Path: " + sectionPath);
192
-
193
- return "";
194
- }
195
-
196
- string newFolderPath = AssetDatabase.GUIDToAssetPath(sectionFolder);
197
-
198
- return newFolderPath + "/" + builderPrefix + $"_{pDB.GetChapterIndex(chapter)}.asset";
199
- }
200
-
201
- /// <summary>
202
- ///
203
- /// </summary>
204
- protected virtual void CreateDataAssets()
205
- {
206
- foreach (var section in currentRoomBuilder.Sections)
207
- {
208
- currentRoomSection = section;
209
-
210
- currentRoomStateSection = currentRoomStateBuilder.Sections[currentRoomBuilder.Sections.IndexOf(section)];
211
-
212
- ConvertRoom();
213
- }
214
-
215
- for (int i = 0; i < currentRoomBuilder.Shells.Count; i++)
216
- CreateShellSave(i);
217
- }
218
-
219
- /// <summary>
220
- ///
221
- /// </summary>
222
- protected virtual void ConvertRoom()
223
- {
224
- for (int i = 0; i < currentRoomSection.Rooms.Count; i++)
225
- {
226
- currentRoomData = currentRoomSection.Rooms[i];
227
-
228
- SaveRoom(currentRoomData.progressionValue);
229
- }
230
- }
231
-
232
- /// <summary>
233
- ///
234
- /// </summary>
235
- /// <param name="pValue"></param>
236
- protected virtual void SaveRoom(Objective pValue)
237
- {
238
- int index = pDB.Chapters.IndexOf(currentRoomStateSection.Chapter);
239
-
240
- string sectionPath = currentRoomStateBuilder.Sections[index].GetFolderPath();
241
-
242
- string sectionPrefix = currentRoomStateBuilder.Sections[index].name.Replace(".asset", "");
243
-
244
- string roomStateName = sectionPrefix + "_" + pValue.Description;
245
-
246
- if (!ConvertUtility.TryCreateFolder(ref sectionPath, roomStateName))
247
- return;
248
-
249
- string newAssetPath = sectionPath + "/" + roomStateName + ".asset";
250
-
251
- RoomStateData room = CreateRoomState(pValue, newAssetPath);
252
-
253
- room.SetPersistent(currentRoomData.isPersistent);
254
-
255
- currentRoomStateBuilder.Sections[index].Rooms.Add(room);
256
-
257
- string path = AssetDatabase.GetAssetPath(room);
258
-
259
- if (path.Length >= 252)
260
- UnityEngine.Debug.LogWarning("path too long for: " + path);
261
-
262
- EditorUtility.SetDirty(currentRoomStateBuilder);
263
-
264
- EditorUtility.SetDirty(currentRoomStateBuilder.Sections[index]);
265
-
266
- EditorUtility.SetDirty(room);
267
- }
268
-
269
- /// <summary>
270
- ///
271
- /// </summary>
272
- /// <param name="pValue"></param>
273
- /// <param name="path"></param>
274
- /// <param name="data"></param>
275
- /// <returns></returns>
276
- protected virtual RoomStateData CreateRoomState(Objective pValue, string path, RoomStateData data = null)
277
- {
278
- bool createAsset = false;
279
-
280
- if (data == null)
281
- {
282
- data = ScriptableObject.CreateInstance<RoomStateData>();
283
-
284
- data.SetProgressionValue(pValue);
285
-
286
-
287
- createAsset = true;
288
- }
289
-
290
- string dataAssetPath = path.Replace(".asset", "");
291
-
292
- data = ConvertRoomData(data, dataAssetPath);
293
-
294
- if (createAsset)
295
- ConvertUtility.CreateAssetAt(data, path);
296
-
297
- return data;
298
- }
299
-
300
- /// <summary>
301
- ///
302
- /// </summary>
303
- /// <param name="data"></param>
304
- /// <param name="path"></param>
305
- /// <returns></returns>
306
- protected virtual RoomStateData ConvertRoomData(RoomStateData data, string path)
307
- {
308
- data.dataStates.Add(SaveDataAsset<SpawnableStateData, GameObject>(path, "Spawnables", currentRoomData.spawnDatas));
309
-
310
- data.dataStates.Add(SaveDataAsset<ActorStateData, ActorData>(path, "Actors", currentRoomData.actorDatas));
311
-
312
- data.dataStates.Add(SaveDataAsset<ItemStateData, ItemData>(path, "Items", currentRoomData.itemDatas));
313
-
314
- data.dataStates.Add(SaveDataAsset<TriggerStateData, EventTrigger>(path, "Triggers", currentRoomData.triggers));
315
-
316
- data.dataStates.Add(SaveDataAsset<SubAreaStateData, SubAreaData>(path, "SubAreas", currentRoomData.subAreas));
317
-
318
- data.dataStates.Add(SaveDataAsset<DoorStateData, DoorData>(path, "Doors", currentRoomData.doorDatas));
319
-
320
- data.dataStates.Add(SaveDataAsset<MoveStateData, MoveData>(path, "Moveables", currentRoomData.moveDatas));
321
-
322
- data.dataStates
323
- .Add(SaveDataAsset<SaveableStateData, SaveableDataSet>(path, "Saveables", currentRoomData.saveables.dataSets));
324
-
325
- data.dataStates.RemoveAll(item => item == null);
326
-
327
- return data;
328
- }
329
-
330
- /// <summary>
331
- ///
332
- /// </summary>
333
- /// <typeparam name="T"></typeparam>
334
- /// <typeparam name="T2"></typeparam>
335
- /// <param name="path"></param>
336
- /// <param name="dataAssetName"></param>
337
- /// <param name="list"></param>
338
- /// <returns></returns>
339
- protected virtual ScriptableObject SaveDataAsset<T, T2>(string path, string dataAssetName, List<T2> list)
340
- where T : StateDataAsset<T2>
341
- {
342
- if (list.Count == 0)
343
- return null;
344
-
345
- string[] guids = AssetDatabase.FindAssets($"t:{typeof(T).Name}",
346
- new[] { Path.GetDirectoryName(path.TrimEnd(Path.DirectorySeparatorChar)) });
347
-
348
- T dataAsset;
349
-
350
- if (guids.Length > 0)
351
- dataAsset = ConvertUtility.GetAssetFromGUID<T>(guids[0]);
352
- else
353
- dataAsset = ScriptableObject.CreateInstance<T>();
354
-
355
- dataAsset.SetDatas(list);
356
-
357
- if (!(guids.Length > 0) && dataAsset.datas != null && dataAsset.datas.Count != 0)
358
- AssetDatabase.CreateAsset(dataAsset, path + "_" + dataAssetName + ".asset");
359
-
360
- EditorUtility.SetDirty(dataAsset);
361
-
362
- AssetDatabase.SaveAssets();
363
-
364
- if (guids.Length > 0)
365
- return null;
366
-
367
- return dataAsset;
368
- }
369
-
370
- /// <summary>
371
- ///
372
- /// </summary>
373
- /// <param name="i"></param>
374
- protected virtual void CreateShellSave(int i)
375
- {
376
- if (!CreateShellPath($"_{i}_Shell", out string newAssetPath))
377
- {
378
- UnityEngine.Debug.LogWarning("ALERT: Had trouble creating shell path, aborting for index: " + i);
379
-
380
- return;
381
- }
382
-
383
- currentRoomData = currentRoomBuilder.Shells[i];
384
-
385
- RoomStateData shellAsset = CreateRoomState(null, newAssetPath);
386
-
387
- CheckFillShells(i);
388
-
389
- if (currentRoomStateBuilder.Shells.HasValidIndexFor(i))
390
- currentRoomStateBuilder.Shells[i] = shellAsset;
391
- else
392
- currentRoomStateBuilder.Shells.Add(shellAsset);
393
-
394
- EditorUtility.SetDirty(currentRoomStateBuilder);
395
- }
396
-
397
- /// <summary>
398
- ///
399
- /// </summary>
400
- /// <param name="builderSuffix"></param>
401
- /// <param name="newAssetPath"></param>
402
- /// <returns></returns>
403
- protected virtual bool CreateShellPath(string builderSuffix, out string newAssetPath)
404
- {
405
- newAssetPath = "";
406
-
407
- string shellPath = currentRoomStateBuilder.GetFolderPath();
408
-
409
- if (!ConvertUtility.TryCreateFolder(ref shellPath, currentRoomStateBuilder.name + "_Shell"))
410
- return false;
411
-
412
- string builderPrefix = currentRoomStateBuilder.name.Replace(".asset", "");
413
-
414
- string shellAssetName = builderPrefix + builderSuffix;
415
-
416
- if (!ConvertUtility.TryCreateFolder(ref shellPath, shellAssetName))
417
- return false;
418
-
419
- newAssetPath = shellPath + "/" + shellAssetName + ".asset";
420
-
421
- return true;
422
- }
423
-
424
- /// <summary>
425
- ///
426
- /// </summary>
427
- /// <param name="i"></param>
428
- protected virtual void CheckFillShells(int i)
429
- {
430
- if (currentRoomStateBuilder.Shells.Count < i)
431
- {
432
- currentRoomStateBuilder.Shells.Add(null);
433
-
434
- CheckFillShells(i);
435
- }
436
- }
437
- }
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.Doors;
3
+ using DREditor.Editor;
4
+ using DREditor.Progressing;
5
+ using DREditor.RoomBuilding;
6
+ using DREditor.RoomBuilding.Implementation;
7
+ using DREditor.RoomBuilding.Implementation.Actors;
8
+ using DREditor.RoomBuilding.Old;
9
+ using DREditor.SubAreas;
10
+ using DREditor.Talkables;
11
+ using DREditor.Triggers;
12
+ using System.Collections.Generic;
13
+ using System.IO;
14
+ using UnityEditor;
15
+ using UnityEngine;
16
+
17
+ namespace DREditor.Editor.Utility.Converting
18
+ {
19
+ /// <summary>
20
+ ///
21
+ /// </summary>
22
+ public class ConvertRoomDataRegion
23
+ {
24
+ /// <summary>
25
+ ///
26
+ /// </summary>
27
+ protected ProgressionDatabase pDB;
28
+
29
+ /// <summary>
30
+ ///
31
+ /// </summary>
32
+ protected RoomBuilder currentRoomBuilder;
33
+
34
+ /// <summary>
35
+ ///
36
+ /// </summary>
37
+ protected RoomSection currentRoomSection;
38
+
39
+ /// <summary>
40
+ ///
41
+ /// </summary>
42
+ protected RoomData currentRoomData;
43
+
44
+ /// <summary>
45
+ ///
46
+ /// </summary>
47
+ protected RoomStateBuilder currentRoomStateBuilder;
48
+
49
+ /// <summary>
50
+ ///
51
+ /// </summary>
52
+ protected RoomStateSection currentRoomStateSection;
53
+
54
+
55
+ [MenuItem("DREditor/Convert/Convert First Room Data Builder")]
56
+ public static void ConvertFirstRoomDataBuilders() => new ConvertRoomDataRegion().ConvertFirst();
57
+
58
+ /// <summary>
59
+ ///
60
+ /// </summary>
61
+ public virtual void ConvertFirst()
62
+ {
63
+ var roomBuilders = BuilderUtility.FindAssetsByType<RoomBuilder>();
64
+
65
+ currentRoomBuilder = roomBuilders[0];
66
+
67
+ CreateRoomStateBuilder(roomBuilders[0]);
68
+ }
69
+
70
+
71
+ [MenuItem("DREditor/Convert/Convert All Room Data Builders")]
72
+ public static void ConvertAllRoomDataBuilders() => new ConvertRoomDataRegion().ConvertAll();
73
+
74
+ /// <summary>
75
+ ///
76
+ /// </summary>
77
+ public virtual void ConvertAll()
78
+ {
79
+ if (!DatabaseUtility.InitializeDatabase(pDB, out pDB))
80
+ return;
81
+
82
+ var roomBuilders = BuilderUtility.FindAssetsByType<RoomBuilder>();
83
+
84
+ foreach (var roomBuilder in roomBuilders)
85
+ CreateRoomStateBuilder(roomBuilder);
86
+ }
87
+
88
+ /// <summary>
89
+ ///
90
+ /// </summary>
91
+ /// <param name="roomBuilder"></param>
92
+ public virtual void CreateRoomStateBuilder(RoomBuilder roomBuilder)
93
+ {
94
+ currentRoomBuilder = roomBuilder;
95
+
96
+ InitializeBuilder(roomBuilder.name.Replace(".asset", ""));
97
+ }
98
+
99
+ /// <summary>
100
+ ///
101
+ /// </summary>
102
+ /// <param name="builderName"></param>
103
+ protected virtual void InitializeBuilder(string builderName)
104
+ {
105
+ var builderAsset = ScriptableObject.CreateInstance<RoomStateBuilder>();
106
+
107
+ string buildFolderPath = "Assets/RoomBuilding";
108
+
109
+ if (!ConvertUtility.ProjectFolderExists(buildFolderPath))
110
+ AssetDatabase.CreateFolder("Assets", "RoomBuilding");
111
+
112
+ string buildFolder = AssetDatabase.CreateFolder(buildFolderPath, builderName);
113
+
114
+ if (buildFolder == "")
115
+ {
116
+ UnityEngine.Debug.LogWarning("Could not create folder. Canceling Initialization.");
117
+
118
+ UnityEngine.Debug.Log("Builder Path: " + buildFolderPath);
119
+
120
+ return;
121
+ }
122
+
123
+ string newFolderPath = AssetDatabase.GUIDToAssetPath(buildFolder);
124
+
125
+ AssetDatabase.CreateAsset(builderAsset, newFolderPath + "/" + builderName + ".asset");
126
+
127
+ AssetDatabase.SaveAssets();
128
+
129
+ EditorUtility.SetDirty(builderAsset);
130
+
131
+ InitializeSections(builderAsset);
132
+ }
133
+
134
+ /// <summary>
135
+ ///
136
+ /// </summary>
137
+ /// <param name="builder"></param>
138
+ protected virtual void InitializeSections(RoomStateBuilder builder)
139
+ {
140
+ foreach (Chapter chapter in pDB.Chapters)
141
+ {
142
+ var sectionAsset = ScriptableObject.CreateInstance<RoomStateSection>();
143
+
144
+ sectionAsset.SetChapter(chapter);
145
+
146
+
147
+ string newAssetPath = CreateSectionAssetPath(chapter, builder);
148
+
149
+ if (newAssetPath == "")
150
+ return;
151
+
152
+
153
+ AssetDatabase.CreateAsset(sectionAsset, newAssetPath);
154
+
155
+ AssetDatabase.SaveAssets();
156
+
157
+ EditorUtility.SetDirty(sectionAsset);
158
+
159
+ builder.Sections.Add(sectionAsset);
160
+
161
+ EditorUtility.SetDirty(builder);
162
+ }
163
+
164
+ currentRoomStateBuilder = builder;
165
+
166
+ CreateDataAssets();
167
+ }
168
+
169
+ /// <summary>
170
+ ///
171
+ /// </summary>
172
+ /// <param name="chapter"></param>
173
+ /// <param name="builder"></param>
174
+ /// <returns></returns>
175
+ protected virtual string CreateSectionAssetPath(Chapter chapter, RoomStateBuilder builder)
176
+ {
177
+ string builderPath = AssetDatabase.GetAssetPath(builder);
178
+
179
+ string builderPrefix = builder.name.Replace(".asset", "");
180
+
181
+ string sectionPath = builderPath.Replace("/" + builder.name + ".asset", "");
182
+
183
+ string sectionFolderName = builderPrefix + $"_{pDB.GetChapterIndex(chapter)}";
184
+
185
+ string sectionFolder = AssetDatabase.CreateFolder(sectionPath, sectionFolderName);
186
+
187
+ if (sectionFolder == "")
188
+ {
189
+ UnityEngine.Debug.LogWarning("Could not create folder. Canceling Initialization.");
190
+
191
+ UnityEngine.Debug.Log("Builder Path: " + sectionPath);
192
+
193
+ return "";
194
+ }
195
+
196
+ string newFolderPath = AssetDatabase.GUIDToAssetPath(sectionFolder);
197
+
198
+ return newFolderPath + "/" + builderPrefix + $"_{pDB.GetChapterIndex(chapter)}.asset";
199
+ }
200
+
201
+ /// <summary>
202
+ ///
203
+ /// </summary>
204
+ protected virtual void CreateDataAssets()
205
+ {
206
+ foreach (var section in currentRoomBuilder.Sections)
207
+ {
208
+ currentRoomSection = section;
209
+
210
+ currentRoomStateSection = currentRoomStateBuilder.Sections[currentRoomBuilder.Sections.IndexOf(section)];
211
+
212
+ ConvertRoom();
213
+ }
214
+
215
+ for (int i = 0; i < currentRoomBuilder.Shells.Count; i++)
216
+ CreateShellSave(i);
217
+ }
218
+
219
+ /// <summary>
220
+ ///
221
+ /// </summary>
222
+ protected virtual void ConvertRoom()
223
+ {
224
+ for (int i = 0; i < currentRoomSection.Rooms.Count; i++)
225
+ {
226
+ currentRoomData = currentRoomSection.Rooms[i];
227
+
228
+ SaveRoom(currentRoomData.progressionValue);
229
+ }
230
+ }
231
+
232
+ /// <summary>
233
+ ///
234
+ /// </summary>
235
+ /// <param name="pValue"></param>
236
+ protected virtual void SaveRoom(Objective pValue)
237
+ {
238
+ int index = pDB.Chapters.IndexOf(currentRoomStateSection.Chapter);
239
+
240
+ string sectionPath = currentRoomStateBuilder.Sections[index].GetFolderPath();
241
+
242
+ string sectionPrefix = currentRoomStateBuilder.Sections[index].name.Replace(".asset", "");
243
+
244
+ string roomStateName = sectionPrefix + "_" + pValue.Description;
245
+
246
+ if (!ConvertUtility.TryCreateFolder(ref sectionPath, roomStateName))
247
+ return;
248
+
249
+ string newAssetPath = sectionPath + "/" + roomStateName + ".asset";
250
+
251
+ RoomStateData room = CreateRoomState(pValue, newAssetPath);
252
+
253
+ room.SetPersistent(currentRoomData.isPersistent);
254
+
255
+ currentRoomStateBuilder.Sections[index].Rooms.Add(room);
256
+
257
+ string path = AssetDatabase.GetAssetPath(room);
258
+
259
+ if (path.Length >= 252)
260
+ UnityEngine.Debug.LogWarning("path too long for: " + path);
261
+
262
+ EditorUtility.SetDirty(currentRoomStateBuilder);
263
+
264
+ EditorUtility.SetDirty(currentRoomStateBuilder.Sections[index]);
265
+
266
+ EditorUtility.SetDirty(room);
267
+ }
268
+
269
+ /// <summary>
270
+ ///
271
+ /// </summary>
272
+ /// <param name="pValue"></param>
273
+ /// <param name="path"></param>
274
+ /// <param name="data"></param>
275
+ /// <returns></returns>
276
+ protected virtual RoomStateData CreateRoomState(Objective pValue, string path, RoomStateData data = null)
277
+ {
278
+ bool createAsset = false;
279
+
280
+ if (data == null)
281
+ {
282
+ data = ScriptableObject.CreateInstance<RoomStateData>();
283
+
284
+ data.SetProgressionValue(pValue);
285
+
286
+
287
+ createAsset = true;
288
+ }
289
+
290
+ string dataAssetPath = path.Replace(".asset", "");
291
+
292
+ data = ConvertRoomData(data, dataAssetPath);
293
+
294
+ if (createAsset)
295
+ ConvertUtility.CreateAssetAt(data, path);
296
+
297
+ return data;
298
+ }
299
+
300
+ /// <summary>
301
+ ///
302
+ /// </summary>
303
+ /// <param name="data"></param>
304
+ /// <param name="path"></param>
305
+ /// <returns></returns>
306
+ protected virtual RoomStateData ConvertRoomData(RoomStateData data, string path)
307
+ {
308
+ data.dataStates.Add(SaveDataAsset<SpawnableStateData, GameObject>(path, "Spawnables", currentRoomData.spawnDatas));
309
+
310
+ data.dataStates.Add(SaveDataAsset<ActorStateData, ActorData>(path, "Actors", currentRoomData.actorDatas));
311
+
312
+ data.dataStates.Add(SaveDataAsset<ItemStateData, ItemData>(path, "Items", currentRoomData.itemDatas));
313
+
314
+ data.dataStates.Add(SaveDataAsset<TriggerStateData, EventTrigger>(path, "Triggers", currentRoomData.triggers));
315
+
316
+ data.dataStates.Add(SaveDataAsset<SubAreaStateData, SubAreaData>(path, "SubAreas", currentRoomData.subAreas));
317
+
318
+ data.dataStates.Add(SaveDataAsset<DoorStateData, DoorData>(path, "Doors", currentRoomData.doorDatas));
319
+
320
+ data.dataStates.Add(SaveDataAsset<MoveStateData, MoveData>(path, "Moveables", currentRoomData.moveDatas));
321
+
322
+ data.dataStates
323
+ .Add(SaveDataAsset<SaveableStateData, SaveableDataSet>(path, "Saveables", currentRoomData.saveables.dataSets));
324
+
325
+ data.dataStates.RemoveAll(item => item == null);
326
+
327
+ return data;
328
+ }
329
+
330
+ /// <summary>
331
+ ///
332
+ /// </summary>
333
+ /// <typeparam name="T"></typeparam>
334
+ /// <typeparam name="T2"></typeparam>
335
+ /// <param name="path"></param>
336
+ /// <param name="dataAssetName"></param>
337
+ /// <param name="list"></param>
338
+ /// <returns></returns>
339
+ protected virtual ScriptableObject SaveDataAsset<T, T2>(string path, string dataAssetName, List<T2> list)
340
+ where T : StateDataAsset<T2>
341
+ {
342
+ if (list.Count == 0)
343
+ return null;
344
+
345
+ string[] guids = AssetDatabase.FindAssets($"t:{typeof(T).Name}",
346
+ new[] { Path.GetDirectoryName(path.TrimEnd(Path.DirectorySeparatorChar)) });
347
+
348
+ T dataAsset;
349
+
350
+ if (guids.Length > 0)
351
+ dataAsset = ConvertUtility.GetAssetFromGUID<T>(guids[0]);
352
+ else
353
+ dataAsset = ScriptableObject.CreateInstance<T>();
354
+
355
+ dataAsset.SetDatas(list);
356
+
357
+ if (!(guids.Length > 0) && dataAsset.datas != null && dataAsset.datas.Count != 0)
358
+ AssetDatabase.CreateAsset(dataAsset, path + "_" + dataAssetName + ".asset");
359
+
360
+ EditorUtility.SetDirty(dataAsset);
361
+
362
+ AssetDatabase.SaveAssets();
363
+
364
+ if (guids.Length > 0)
365
+ return null;
366
+
367
+ return dataAsset;
368
+ }
369
+
370
+ /// <summary>
371
+ ///
372
+ /// </summary>
373
+ /// <param name="i"></param>
374
+ protected virtual void CreateShellSave(int i)
375
+ {
376
+ if (!CreateShellPath($"_{i}_Shell", out string newAssetPath))
377
+ {
378
+ UnityEngine.Debug.LogWarning("ALERT: Had trouble creating shell path, aborting for index: " + i);
379
+
380
+ return;
381
+ }
382
+
383
+ currentRoomData = currentRoomBuilder.Shells[i];
384
+
385
+ RoomStateData shellAsset = CreateRoomState(null, newAssetPath);
386
+
387
+ CheckFillShells(i);
388
+
389
+ if (currentRoomStateBuilder.Shells.HasValidIndexFor(i))
390
+ currentRoomStateBuilder.Shells[i] = shellAsset;
391
+ else
392
+ currentRoomStateBuilder.Shells.Add(shellAsset);
393
+
394
+ EditorUtility.SetDirty(currentRoomStateBuilder);
395
+ }
396
+
397
+ /// <summary>
398
+ ///
399
+ /// </summary>
400
+ /// <param name="builderSuffix"></param>
401
+ /// <param name="newAssetPath"></param>
402
+ /// <returns></returns>
403
+ protected virtual bool CreateShellPath(string builderSuffix, out string newAssetPath)
404
+ {
405
+ newAssetPath = "";
406
+
407
+ string shellPath = currentRoomStateBuilder.GetFolderPath();
408
+
409
+ if (!ConvertUtility.TryCreateFolder(ref shellPath, currentRoomStateBuilder.name + "_Shell"))
410
+ return false;
411
+
412
+ string builderPrefix = currentRoomStateBuilder.name.Replace(".asset", "");
413
+
414
+ string shellAssetName = builderPrefix + builderSuffix;
415
+
416
+ if (!ConvertUtility.TryCreateFolder(ref shellPath, shellAssetName))
417
+ return false;
418
+
419
+ newAssetPath = shellPath + "/" + shellAssetName + ".asset";
420
+
421
+ return true;
422
+ }
423
+
424
+ /// <summary>
425
+ ///
426
+ /// </summary>
427
+ /// <param name="i"></param>
428
+ protected virtual void CheckFillShells(int i)
429
+ {
430
+ if (currentRoomStateBuilder.Shells.Count < i)
431
+ {
432
+ currentRoomStateBuilder.Shells.Add(null);
433
+
434
+ CheckFillShells(i);
435
+ }
436
+ }
437
+ }
438
438
  }