net.dreditor.roombuilding 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.
Files changed (133) hide show
  1. package/.attestation.p7m +0 -0
  2. package/DREditor.RoomBuilding.asmdef +28 -28
  3. package/DREditor.RoomBuilding.asmdef.meta +7 -7
  4. package/Editor/DREditor.RoomBuilding.Editor.asmdef +19 -19
  5. package/Editor/DREditor.RoomBuilding.Editor.asmdef.meta +7 -7
  6. package/Editor/FindCharactersInRoomsWizard.cs +55 -55
  7. package/Editor/FindCharactersInRoomsWizard.cs.meta +11 -11
  8. package/Editor/RoomBuilderContainsObjective.cs +38 -38
  9. package/Editor/RoomBuilderContainsObjective.cs.meta +11 -11
  10. package/Editor/RoomBuilderScanWizard.cs +90 -90
  11. package/Editor/RoomBuilderScanWizard.cs.meta +11 -11
  12. package/Editor/ScanRoomBuilders.cs +74 -74
  13. package/Editor/ScanRoomBuilders.cs.meta +11 -11
  14. package/Editor.meta +8 -8
  15. package/Implementation/Actors/ActorData.cs +115 -115
  16. package/Implementation/Actors/ActorData.cs.meta +11 -11
  17. package/Implementation/Actors/ActorStateData.cs +10 -10
  18. package/Implementation/Actors/ActorStateData.cs.meta +11 -11
  19. package/Implementation/Actors/ActorStateLoader.cs +344 -344
  20. package/Implementation/Actors/ActorStateLoader.cs.meta +11 -11
  21. package/Implementation/Actors/TActorData.cs +35 -35
  22. package/Implementation/Actors/TActorData.cs.meta +11 -11
  23. package/Implementation/Actors/TrialActorManager.cs +157 -157
  24. package/Implementation/Actors/TrialActorManager.cs.meta +11 -11
  25. package/Implementation/Actors.meta +8 -8
  26. package/Implementation/DoorLoader.cs +117 -117
  27. package/Implementation/DoorLoader.cs.meta +11 -11
  28. package/Implementation/DoorLoaderUtility.cs +51 -51
  29. package/Implementation/DoorLoaderUtility.cs.meta +11 -11
  30. package/Implementation/DoorStateData.cs +11 -11
  31. package/Implementation/DoorStateData.cs.meta +11 -11
  32. package/Implementation/ItemActorLoader.cs +157 -157
  33. package/Implementation/ItemActorLoader.cs.meta +11 -11
  34. package/Implementation/ItemData.cs +67 -67
  35. package/Implementation/ItemData.cs.meta +11 -11
  36. package/Implementation/ItemStateData.cs +10 -10
  37. package/Implementation/ItemStateData.cs.meta +11 -11
  38. package/Implementation/MoveLoader.cs +67 -67
  39. package/Implementation/MoveLoader.cs.meta +11 -11
  40. package/Implementation/MoveStateData.cs +11 -11
  41. package/Implementation/MoveStateData.cs.meta +11 -11
  42. package/Implementation/RoomStateHandlerBase.cs +241 -241
  43. package/Implementation/RoomStateHandlerBase.cs.meta +11 -11
  44. package/Implementation/SaveableData.cs +56 -56
  45. package/Implementation/SaveableData.cs.meta +11 -11
  46. package/Implementation/SaveableDataSet.cs +66 -66
  47. package/Implementation/SaveableDataSet.cs.meta +11 -11
  48. package/Implementation/SaveableManager.cs +70 -70
  49. package/Implementation/SaveableManager.cs.meta +11 -11
  50. package/Implementation/SaveableStateData.cs +10 -10
  51. package/Implementation/SaveableStateData.cs.meta +11 -11
  52. package/Implementation/SpawnableLoader.cs +125 -125
  53. package/Implementation/SpawnableLoader.cs.meta +11 -11
  54. package/Implementation/SpawnableStateData.cs +11 -11
  55. package/Implementation/SpawnableStateData.cs.meta +11 -11
  56. package/Implementation/StateDataAsset.cs +28 -28
  57. package/Implementation/StateDataAsset.cs.meta +11 -11
  58. package/Implementation/SubAreaLoader.cs +108 -108
  59. package/Implementation/SubAreaLoader.cs.meta +11 -11
  60. package/Implementation/SubAreaStateData.cs +11 -11
  61. package/Implementation/SubAreaStateData.cs.meta +11 -11
  62. package/Implementation/TriggerConverter.cs +137 -137
  63. package/Implementation/TriggerConverter.cs.meta +11 -11
  64. package/Implementation/TriggerLoader.cs +295 -295
  65. package/Implementation/TriggerLoader.cs.meta +11 -11
  66. package/Implementation/TriggerStateData.cs +18 -18
  67. package/Implementation/TriggerStateData.cs.meta +11 -11
  68. package/Implementation.meta +8 -8
  69. package/InstanceListWrapper.cs +23 -23
  70. package/InstanceListWrapper.cs.meta +11 -11
  71. package/Instances/ConvertInstanceData.cs +89 -89
  72. package/Instances/ConvertInstanceData.cs.meta +11 -11
  73. package/Instances/InstanceData.cs +43 -43
  74. package/Instances/InstanceData.cs.meta +11 -11
  75. package/Instances/InstanceStateData.cs +51 -51
  76. package/Instances/InstanceStateData.cs.meta +11 -11
  77. package/Instances/RoomInstanceData.cs +68 -68
  78. package/Instances/RoomInstanceData.cs.meta +11 -11
  79. package/Instances/RoomInstanceManager.cs +452 -452
  80. package/Instances/RoomInstanceManager.cs.meta +11 -11
  81. package/Instances.meta +8 -8
  82. package/LoadInvestigationRoomState.cs +53 -53
  83. package/LoadInvestigationRoomState.cs.meta +11 -11
  84. package/Old/ActorLoader.cs +382 -382
  85. package/Old/ActorLoader.cs.meta +11 -11
  86. package/Old/Room.cs +24 -24
  87. package/Old/Room.cs.meta +11 -11
  88. package/Old/RoomBuilder.cs +59 -59
  89. package/Old/RoomBuilder.cs.meta +11 -11
  90. package/Old/RoomData.cs +90 -90
  91. package/Old/RoomData.cs.meta +11 -11
  92. package/Old/RoomManager.cs +256 -256
  93. package/Old/RoomManager.cs.meta +11 -11
  94. package/Old/RoomManagerDisplayEditor.cs +72 -72
  95. package/Old/RoomManagerDisplayEditor.cs.meta +11 -11
  96. package/Old/RoomManagerEditor.cs +211 -211
  97. package/Old/RoomManagerEditor.cs.meta +11 -11
  98. package/Old/RoomManagerShellDisplayEditor.cs +48 -48
  99. package/Old/RoomManagerShellDisplayEditor.cs.meta +11 -11
  100. package/Old/RoomSection.cs +35 -35
  101. package/Old/RoomSection.cs.meta +11 -11
  102. package/Old.meta +8 -8
  103. package/RoomManagerBase.cs +84 -84
  104. package/RoomManagerBase.cs.meta +11 -11
  105. package/RoomManagerEditorBase.cs +86 -86
  106. package/RoomManagerEditorBase.cs.meta +11 -11
  107. package/RoomManagerEditorCoreBase.cs +159 -159
  108. package/RoomManagerEditorCoreBase.cs.meta +11 -11
  109. package/RoomSaveDisplayEditorBase.cs +111 -111
  110. package/RoomSaveDisplayEditorBase.cs.meta +11 -11
  111. package/RoomShellDisplayEditorBase.cs +68 -68
  112. package/RoomShellDisplayEditorBase.cs.meta +11 -11
  113. package/RoomStateBuilder.cs +53 -53
  114. package/RoomStateBuilder.cs.meta +11 -11
  115. package/RoomStateData.cs +58 -58
  116. package/RoomStateData.cs.meta +11 -11
  117. package/RoomStateManager.cs +202 -202
  118. package/RoomStateManager.cs.meta +11 -11
  119. package/RoomStateManagerEditor.cs +392 -392
  120. package/RoomStateManagerEditor.cs.meta +11 -11
  121. package/RoomStateSaveDisplayEditor.cs +175 -175
  122. package/RoomStateSaveDisplayEditor.cs.meta +11 -11
  123. package/RoomStateSection.cs +69 -69
  124. package/RoomStateSection.cs.meta +11 -11
  125. package/RoomStateShellDisplayEditor.cs +108 -108
  126. package/RoomStateShellDisplayEditor.cs.meta +11 -11
  127. package/{Samples → Samples~}/Room_State_Manager.prefab +473 -473
  128. package/{Samples → Samples~}/Room_State_Manager.prefab.meta +7 -7
  129. package/{Samples → Samples~}/Trial_Actor_Manager.prefab +51 -51
  130. package/{Samples → Samples~}/Trial_Actor_Manager.prefab.meta +7 -7
  131. package/package.json +51 -46
  132. package/package.json.meta +7 -7
  133. package/Samples.meta +0 -8
@@ -1,345 +1,345 @@
1
- //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
- using DREditor.Actors;
3
- using DREditor.Characters;
4
- using DREditor.LocalDialogues;
5
- using System.Collections.Generic;
6
- using UnityEngine;
7
-
8
- namespace DREditor.RoomBuilding.Implementation.Actors
9
- {
10
- /// <summary>
11
- ///
12
- /// </summary>
13
- [ClassHeader(nameof(RoomStateHandlerBase<ActorStateData, ActorData>) +
14
- " for types <" + nameof(ActorStateData) + ", " + nameof(ActorData) + ">" +
15
- "\n\n")]
16
- [ExecuteInEditMode]
17
- public class ActorStateLoader : RoomStateHandlerBase<ActorStateData, ActorData>
18
- {
19
- /// <summary>
20
- ///
21
- /// </summary>
22
- [Header("")]
23
- [Divider]
24
- [Tooltip("")]
25
- [SerializeField] protected CharacterDatabase characterDatabase = null;
26
-
27
- /// <summary>
28
- ///
29
- /// </summary>
30
- [Tooltip("")]
31
- [SerializeField] protected List<GameObject> ActorPrefabs = new();
32
-
33
-
34
- protected virtual void OnValidate() => PrefabReferences();
35
-
36
- /// <summary>
37
- ///
38
- /// </summary>
39
- protected virtual void PrefabReferences()
40
- {
41
- if (characterDatabase != null && ActorPrefabs.Count < characterDatabase.GetActorPrefabCount())
42
- {
43
- List<GameObject> actorPrefabs = new();
44
-
45
- foreach (Character character in characterDatabase.Characters)
46
- if (character.ActorPrefab != null)
47
- actorPrefabs.Add(character.ActorPrefab);
48
-
49
- ActorPrefabs = actorPrefabs;
50
-
51
- UnityEngine.Debug.Log(nameof(ActorStateLoader) + ": Updated actor prefab references.");
52
- }
53
- }
54
-
55
- /// <inheritdoc/>
56
- public override List<ActorData> Save()
57
- {
58
- Actor[] actors = (Actor[])FindObjectsByType(typeof(Actor));
59
-
60
- if (actors.Length == 0)
61
- return new();
62
-
63
- List<ActorData> actorDataInstances = new();
64
-
65
- for (int i = 0; i < actors.Length; i++)
66
- for (int j = 0; j < ActorPrefabs.Count; j++)
67
- if (ActorPrefabs[j] != null && ActorPrefabs[j].name == actors[i].gameObject.name)
68
- actorDataInstances.Add((ActorData)new ActorData(ActorPrefabs[j].name, actors[i]).Clone());
69
-
70
- return actorDataInstances;
71
- }
72
-
73
-
74
- /// <inheritdoc/>
75
- public override void Unload(bool inEditor)
76
- {
77
- Actor[] actors = (Actor[])FindObjectsByType(typeof(Actor));
78
-
79
- if (actors.Length == 0)
80
- return;
81
-
82
- for (int i = 0; i < actors.Length; i++)
83
- for (int j = 0; j < ActorPrefabs.Count; j++) // Look through Actor references
84
- if (ActorPrefabs[j] != null &&
85
- ActorPrefabs[j].name == actors[i].gameObject.name) // Found
86
- {
87
- if (inEditor)
88
- DestroyImmediate(actors[i].gameObject);
89
- else
90
- Destroy(actors[i].gameObject);
91
-
92
- break;
93
- }
94
- }
95
-
96
- /// <inheritdoc/>
97
- protected override bool LoadedInstanceValid(string dataInstance, out ActorData result)
98
- => base.LoadedInstanceValid(dataInstance, out result) && !string.IsNullOrEmpty(result.aReference);
99
-
100
- /// <inheritdoc/>
101
- protected override void LoadAssetProcess(List<ActorData> baseDatas, List<ActorData> instanceDatas = null)
102
- => LoadActors(baseDatas, instanceDatas);
103
-
104
- /// <inheritdoc/>
105
- protected override void InitializeVisibleBaseDatas(List<ActorData> baseDatas)
106
- {
107
- if (baseDatas.Count > 0)
108
- base.InitializeVisibleBaseDatas(baseDatas);
109
- }
110
-
111
- /// <inheritdoc/>
112
- protected override void InitializeVisibleInstanceDatas(List<ActorData> instanceDatas = null)
113
- {
114
- if (instanceDatas != null && instanceDatas.Count > 0)
115
- base.InitializeVisibleInstanceDatas(instanceDatas);
116
- }
117
-
118
- #region Loading
119
-
120
- /// <summary>
121
- ///
122
- /// </summary>
123
- /// <param name="actors"></param>
124
- /// <param name="instanceDatas"></param>
125
- protected virtual void LoadActors(List<ActorData> actors, List<ActorData> instanceDatas = null)
126
- {
127
- for (int i = 0; i < actors.Count; i++)
128
- AttemptLoadActor(i, actors, instanceDatas);
129
- }
130
-
131
- /// <summary>
132
- ///
133
- /// </summary>
134
- /// <param name="i"></param>
135
- /// <param name="actors"></param>
136
- /// <param name="instanceDatas"></param>
137
- protected virtual void AttemptLoadActor(int i, List<ActorData> actors, List<ActorData> instanceDatas = null)
138
- {
139
- for (int j = 0; j < ActorPrefabs.Count; j++)
140
- if (ActorPrefabs[j] != null && ActorPrefabs[j].name == actors[i].aReference)
141
- if (instanceDatas != null && instanceDatas.Count > 0)
142
- LoadActor(ActorPrefabs[j], (ActorData)actors[i].Clone(), VerifyData(instanceDatas, ActorPrefabs[j].name));
143
- else
144
- LoadActor(ActorPrefabs[j], (ActorData)actors[i].Clone());
145
- }
146
-
147
- /// <summary>
148
- ///
149
- /// </summary>
150
- /// <param name="instanceDatas"></param>
151
- /// <param name="nameLook"></param>
152
- /// <returns></returns>
153
- protected virtual ActorData VerifyData(List<ActorData> instanceDatas, string nameLook)
154
- {
155
- // This if statement has been added because when leaving damons dorm on FTE 1
156
- // the game freezes going to the dorm hallway because it has dorm hallway instance data from the
157
- // previous objective. why this happens hasn't been fixed but this code keeps this problem from making
158
- // an error freezing the game in a exported build.
159
-
160
- if (instanceDatas == null)
161
- UnityEngine.Debug.LogWarning("CRITICAL WARNING! INSTANCE LIST WAS NULL. Instance data might be leaking Through the game?");
162
- else if (instanceDatas.Count == 0)
163
- UnityEngine.Debug.Log("Actor Instance Data was empty.");
164
-
165
- if (instanceDatas == null || instanceDatas.Count == 0)
166
- return null;
167
-
168
- for (int i = 0; i < instanceDatas.Count; i++)
169
- if (instanceDatas[i].aReference == nameLook)
170
- return instanceDatas[i];
171
-
172
- UnityEngine.Debug
173
- .LogWarning("The instance actor data list couldn't find the character it was looking for? " + nameLook);
174
-
175
- return null;
176
- }
177
-
178
- /// <summary>
179
- ///
180
- /// </summary>
181
- /// <param name="shell"></param>
182
- /// <param name="actorData"></param>
183
- /// <param name="instanceData"></param>
184
- protected virtual void LoadActor(GameObject shell, ActorData actorData, ActorData instanceData = null)
185
- {
186
- GameObject spawnedActor = Instantiate(shell);
187
-
188
- Actor actor = spawnedActor.GetComponent<Actor>();
189
-
190
- ApplyActorData(actor, actorData);
191
-
192
- ApplyInstanceData(actor, actorData, instanceData);
193
- }
194
-
195
- /// <summary>
196
- ///
197
- /// </summary>
198
- /// <param name="actor"></param>
199
- /// <param name="actorData"></param>
200
- protected virtual void ApplyActorData(Actor actor, ActorData actorData)
201
- {
202
- actor.gameObject.name = actorData.aReference;
203
-
204
- ApplyBasicActorData(actor, actorData);
205
-
206
- actor.conversations.Clear();
207
-
208
- for (int i = 0; i < actorData.actorDialogues.Count; i++)
209
- actor.conversations.Add((LocalDialogue)actorData.actorDialogues[i].Clone());
210
-
211
- ApplyActorMaterial(actor, actorData.mat);
212
-
213
- ApplyActorSprite(actor, actorData);
214
- }
215
-
216
- /// <summary>
217
- ///
218
- /// </summary>
219
- /// <param name="actor"></param>
220
- /// <param name="actorData"></param>
221
- protected virtual void ApplyBasicActorData(Actor actor, ActorData actorData)
222
- {
223
- actor.transform.position = actorData.position;
224
-
225
- actor.transform.eulerAngles = actorData.rotation;
226
-
227
- actor.SetIdentified(actorData.identified);
228
-
229
- if (!string.IsNullOrEmpty(actorData.displayName))
230
- actor.DisplayName = actorData.displayName;
231
- }
232
-
233
- /// <summary>
234
- ///
235
- /// </summary>
236
- /// <param name="actor"></param>
237
- /// <param name="mat"></param>
238
- protected virtual void ApplyActorMaterial(Actor actor, Material mat)
239
- {
240
- var meshes = actor.GetComponentsInChildren<MeshRenderer>();
241
-
242
- meshes[0].material = mat;
243
-
244
- Material material = new(meshes[1].sharedMaterial.shader)
245
- {
246
- mainTexture = meshes[0].sharedMaterial.mainTexture
247
- };
248
-
249
- meshes[1].sharedMaterial = material;
250
-
251
- meshes[1].sharedMaterial.color = Color.black;
252
-
253
- meshes[1].sharedMaterial.renderQueue = 3000;
254
- }
255
-
256
- /// <summary>
257
- ///
258
- /// </summary>
259
- /// <param name="actor"></param>
260
- /// <param name="actorData"></param>
261
- protected virtual void ApplyActorSprite(Actor actor, ActorData actorData)
262
- {
263
- var spriteRenderer = actor.GetComponentInChildren<SpriteRenderer>();
264
-
265
- if (spriteRenderer.sprite.name == actorData.matName)
266
- return;
267
-
268
- if (characterDatabase == null)
269
- UnityEngine.Debug.LogError("ALERT: Character Database Not Found?");
270
-
271
- Character character = characterDatabase.GetCharacter(actorData.aReference);
272
-
273
- if (character != null && character.Expressions != null &&
274
- !actorData.matName.Contains(character.Expressions[0].Sprite.name) &&
275
- !spriteRenderer.sprite.name.Contains("stare") &&
276
- !actorData.matName.Contains("Stare"))
277
- {
278
- for (int i = 0; i < character.Expressions.Count; i++)
279
- {
280
- if (actorData.matName.Contains(character.Expressions[i].Sprite.name))
281
- {
282
- spriteRenderer.sprite = character.Sprites[i].Sprite;
283
-
284
- break;
285
- }
286
- }
287
- }
288
- }
289
-
290
- #endregion
291
-
292
- #region Apply Instance Data
293
-
294
- /// <summary>
295
- ///
296
- /// </summary>
297
- /// <param name="actor"></param>
298
- /// <param name="actorData"></param>
299
- /// <param name="instanceData"></param>
300
- protected virtual void ApplyInstanceData(Actor actor, ActorData actorData, ActorData instanceData)
301
- {
302
- if (instanceData == null)
303
- return;
304
-
305
- ApplyBasicActorData(actor, instanceData);
306
-
307
- for (int i = 0; i < instanceData.actorDialogues.Count && i < actorData.actorDialogues.Count; i++)
308
- actor.conversations[i].SetTriggered(instanceData.actorDialogues[i].triggered);
309
-
310
- ApplyActorMaterialInstance(actor, actorData, instanceData);
311
- }
312
-
313
- /// <summary>
314
- ///
315
- /// </summary>
316
- /// <param name="actor"></param>
317
- /// <param name="actorData"></param>
318
- /// <param name="instanceData"></param>
319
- protected virtual void ApplyActorMaterialInstance(Actor actor, ActorData actorData, ActorData instanceData)
320
- {
321
- Character character = characterDatabase.GetCharacter(actorData.aReference);
322
-
323
- if (character == null)
324
- return;
325
-
326
- UnityEngine.Debug.Log("REPORT: MATERIAL NAME WAS: " + instanceData.matName);
327
-
328
- for (int i = 0; i < character.Expressions.Count; i++)
329
- {
330
- Expression expression = character.Expressions[i];
331
-
332
- if (instanceData.matName.Contains(expression.Sprite.name))
333
- {
334
- ApplyActorMaterial(actor, expression.Sprite);
335
-
336
- actor.GetComponentInChildren<SpriteRenderer>().sprite = character.Sprites[i].Sprite;
337
-
338
- break;
339
- }
340
- }
341
- }
342
-
343
- #endregion
344
- }
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.Actors;
3
+ using DREditor.Characters;
4
+ using DREditor.LocalDialogues;
5
+ using System.Collections.Generic;
6
+ using UnityEngine;
7
+
8
+ namespace DREditor.RoomBuilding.Implementation.Actors
9
+ {
10
+ /// <summary>
11
+ ///
12
+ /// </summary>
13
+ [ClassHeader(nameof(RoomStateHandlerBase<ActorStateData, ActorData>) +
14
+ " for types <" + nameof(ActorStateData) + ", " + nameof(ActorData) + ">" +
15
+ "\n\n")]
16
+ [ExecuteInEditMode]
17
+ public class ActorStateLoader : RoomStateHandlerBase<ActorStateData, ActorData>
18
+ {
19
+ /// <summary>
20
+ ///
21
+ /// </summary>
22
+ [Header("")]
23
+ [Divider]
24
+ [Tooltip("")]
25
+ [SerializeField] protected CharacterDatabase characterDatabase = null;
26
+
27
+ /// <summary>
28
+ ///
29
+ /// </summary>
30
+ [Tooltip("")]
31
+ [SerializeField] protected List<GameObject> ActorPrefabs = new();
32
+
33
+
34
+ protected virtual void OnValidate() => PrefabReferences();
35
+
36
+ /// <summary>
37
+ ///
38
+ /// </summary>
39
+ protected virtual void PrefabReferences()
40
+ {
41
+ if (characterDatabase != null && ActorPrefabs.Count < characterDatabase.GetActorPrefabCount())
42
+ {
43
+ List<GameObject> actorPrefabs = new();
44
+
45
+ foreach (Character character in characterDatabase.Characters)
46
+ if (character.ActorPrefab != null)
47
+ actorPrefabs.Add(character.ActorPrefab);
48
+
49
+ ActorPrefabs = actorPrefabs;
50
+
51
+ UnityEngine.Debug.Log(nameof(ActorStateLoader) + ": Updated actor prefab references.");
52
+ }
53
+ }
54
+
55
+ /// <inheritdoc/>
56
+ public override List<ActorData> Save()
57
+ {
58
+ Actor[] actors = (Actor[])FindObjectsByType(typeof(Actor));
59
+
60
+ if (actors.Length == 0)
61
+ return new();
62
+
63
+ List<ActorData> actorDataInstances = new();
64
+
65
+ for (int i = 0; i < actors.Length; i++)
66
+ for (int j = 0; j < ActorPrefabs.Count; j++)
67
+ if (ActorPrefabs[j] != null && ActorPrefabs[j].name == actors[i].gameObject.name)
68
+ actorDataInstances.Add((ActorData)new ActorData(ActorPrefabs[j].name, actors[i]).Clone());
69
+
70
+ return actorDataInstances;
71
+ }
72
+
73
+
74
+ /// <inheritdoc/>
75
+ public override void Unload(bool inEditor)
76
+ {
77
+ Actor[] actors = (Actor[])FindObjectsByType(typeof(Actor));
78
+
79
+ if (actors.Length == 0)
80
+ return;
81
+
82
+ for (int i = 0; i < actors.Length; i++)
83
+ for (int j = 0; j < ActorPrefabs.Count; j++) // Look through Actor references
84
+ if (ActorPrefabs[j] != null &&
85
+ ActorPrefabs[j].name == actors[i].gameObject.name) // Found
86
+ {
87
+ if (inEditor)
88
+ DestroyImmediate(actors[i].gameObject);
89
+ else
90
+ Destroy(actors[i].gameObject);
91
+
92
+ break;
93
+ }
94
+ }
95
+
96
+ /// <inheritdoc/>
97
+ protected override bool LoadedInstanceValid(string dataInstance, out ActorData result)
98
+ => base.LoadedInstanceValid(dataInstance, out result) && !string.IsNullOrEmpty(result.aReference);
99
+
100
+ /// <inheritdoc/>
101
+ protected override void LoadAssetProcess(List<ActorData> baseDatas, List<ActorData> instanceDatas = null)
102
+ => LoadActors(baseDatas, instanceDatas);
103
+
104
+ /// <inheritdoc/>
105
+ protected override void InitializeVisibleBaseDatas(List<ActorData> baseDatas)
106
+ {
107
+ if (baseDatas.Count > 0)
108
+ base.InitializeVisibleBaseDatas(baseDatas);
109
+ }
110
+
111
+ /// <inheritdoc/>
112
+ protected override void InitializeVisibleInstanceDatas(List<ActorData> instanceDatas = null)
113
+ {
114
+ if (instanceDatas != null && instanceDatas.Count > 0)
115
+ base.InitializeVisibleInstanceDatas(instanceDatas);
116
+ }
117
+
118
+ #region Loading
119
+
120
+ /// <summary>
121
+ ///
122
+ /// </summary>
123
+ /// <param name="actors"></param>
124
+ /// <param name="instanceDatas"></param>
125
+ protected virtual void LoadActors(List<ActorData> actors, List<ActorData> instanceDatas = null)
126
+ {
127
+ for (int i = 0; i < actors.Count; i++)
128
+ AttemptLoadActor(i, actors, instanceDatas);
129
+ }
130
+
131
+ /// <summary>
132
+ ///
133
+ /// </summary>
134
+ /// <param name="i"></param>
135
+ /// <param name="actors"></param>
136
+ /// <param name="instanceDatas"></param>
137
+ protected virtual void AttemptLoadActor(int i, List<ActorData> actors, List<ActorData> instanceDatas = null)
138
+ {
139
+ for (int j = 0; j < ActorPrefabs.Count; j++)
140
+ if (ActorPrefabs[j] != null && ActorPrefabs[j].name == actors[i].aReference)
141
+ if (instanceDatas != null && instanceDatas.Count > 0)
142
+ LoadActor(ActorPrefabs[j], (ActorData)actors[i].Clone(), VerifyData(instanceDatas, ActorPrefabs[j].name));
143
+ else
144
+ LoadActor(ActorPrefabs[j], (ActorData)actors[i].Clone());
145
+ }
146
+
147
+ /// <summary>
148
+ ///
149
+ /// </summary>
150
+ /// <param name="instanceDatas"></param>
151
+ /// <param name="nameLook"></param>
152
+ /// <returns></returns>
153
+ protected virtual ActorData VerifyData(List<ActorData> instanceDatas, string nameLook)
154
+ {
155
+ // This if statement has been added because when leaving damons dorm on FTE 1
156
+ // the game freezes going to the dorm hallway because it has dorm hallway instance data from the
157
+ // previous objective. why this happens hasn't been fixed but this code keeps this problem from making
158
+ // an error freezing the game in a exported build.
159
+
160
+ if (instanceDatas == null)
161
+ UnityEngine.Debug.LogWarning("CRITICAL WARNING! INSTANCE LIST WAS NULL. Instance data might be leaking Through the game?");
162
+ else if (instanceDatas.Count == 0)
163
+ UnityEngine.Debug.Log("Actor Instance Data was empty.");
164
+
165
+ if (instanceDatas == null || instanceDatas.Count == 0)
166
+ return null;
167
+
168
+ for (int i = 0; i < instanceDatas.Count; i++)
169
+ if (instanceDatas[i].aReference == nameLook)
170
+ return instanceDatas[i];
171
+
172
+ UnityEngine.Debug
173
+ .LogWarning("The instance actor data list couldn't find the character it was looking for? " + nameLook);
174
+
175
+ return null;
176
+ }
177
+
178
+ /// <summary>
179
+ ///
180
+ /// </summary>
181
+ /// <param name="shell"></param>
182
+ /// <param name="actorData"></param>
183
+ /// <param name="instanceData"></param>
184
+ protected virtual void LoadActor(GameObject shell, ActorData actorData, ActorData instanceData = null)
185
+ {
186
+ GameObject spawnedActor = Instantiate(shell);
187
+
188
+ Actor actor = spawnedActor.GetComponent<Actor>();
189
+
190
+ ApplyActorData(actor, actorData);
191
+
192
+ ApplyInstanceData(actor, actorData, instanceData);
193
+ }
194
+
195
+ /// <summary>
196
+ ///
197
+ /// </summary>
198
+ /// <param name="actor"></param>
199
+ /// <param name="actorData"></param>
200
+ protected virtual void ApplyActorData(Actor actor, ActorData actorData)
201
+ {
202
+ actor.gameObject.name = actorData.aReference;
203
+
204
+ ApplyBasicActorData(actor, actorData);
205
+
206
+ actor.conversations.Clear();
207
+
208
+ for (int i = 0; i < actorData.actorDialogues.Count; i++)
209
+ actor.conversations.Add((LocalDialogue)actorData.actorDialogues[i].Clone());
210
+
211
+ ApplyActorMaterial(actor, actorData.mat);
212
+
213
+ ApplyActorSprite(actor, actorData);
214
+ }
215
+
216
+ /// <summary>
217
+ ///
218
+ /// </summary>
219
+ /// <param name="actor"></param>
220
+ /// <param name="actorData"></param>
221
+ protected virtual void ApplyBasicActorData(Actor actor, ActorData actorData)
222
+ {
223
+ actor.transform.position = actorData.position;
224
+
225
+ actor.transform.eulerAngles = actorData.rotation;
226
+
227
+ actor.SetIdentified(actorData.identified);
228
+
229
+ if (!string.IsNullOrEmpty(actorData.displayName))
230
+ actor.DisplayName = actorData.displayName;
231
+ }
232
+
233
+ /// <summary>
234
+ ///
235
+ /// </summary>
236
+ /// <param name="actor"></param>
237
+ /// <param name="mat"></param>
238
+ protected virtual void ApplyActorMaterial(Actor actor, Material mat)
239
+ {
240
+ var meshes = actor.GetComponentsInChildren<MeshRenderer>();
241
+
242
+ meshes[0].material = mat;
243
+
244
+ Material material = new(meshes[1].sharedMaterial.shader)
245
+ {
246
+ mainTexture = meshes[0].sharedMaterial.mainTexture
247
+ };
248
+
249
+ meshes[1].sharedMaterial = material;
250
+
251
+ meshes[1].sharedMaterial.color = Color.black;
252
+
253
+ meshes[1].sharedMaterial.renderQueue = 3000;
254
+ }
255
+
256
+ /// <summary>
257
+ ///
258
+ /// </summary>
259
+ /// <param name="actor"></param>
260
+ /// <param name="actorData"></param>
261
+ protected virtual void ApplyActorSprite(Actor actor, ActorData actorData)
262
+ {
263
+ var spriteRenderer = actor.GetComponentInChildren<SpriteRenderer>();
264
+
265
+ if (spriteRenderer.sprite.name == actorData.matName)
266
+ return;
267
+
268
+ if (characterDatabase == null)
269
+ UnityEngine.Debug.LogError("ALERT: Character Database Not Found?");
270
+
271
+ Character character = characterDatabase.GetCharacter(actorData.aReference);
272
+
273
+ if (character != null && character.Expressions != null &&
274
+ !actorData.matName.Contains(character.Expressions[0].Sprite.name) &&
275
+ !spriteRenderer.sprite.name.Contains("stare") &&
276
+ !actorData.matName.Contains("Stare"))
277
+ {
278
+ for (int i = 0; i < character.Expressions.Count; i++)
279
+ {
280
+ if (actorData.matName.Contains(character.Expressions[i].Sprite.name))
281
+ {
282
+ spriteRenderer.sprite = character.Sprites[i].Sprite;
283
+
284
+ break;
285
+ }
286
+ }
287
+ }
288
+ }
289
+
290
+ #endregion
291
+
292
+ #region Apply Instance Data
293
+
294
+ /// <summary>
295
+ ///
296
+ /// </summary>
297
+ /// <param name="actor"></param>
298
+ /// <param name="actorData"></param>
299
+ /// <param name="instanceData"></param>
300
+ protected virtual void ApplyInstanceData(Actor actor, ActorData actorData, ActorData instanceData)
301
+ {
302
+ if (instanceData == null)
303
+ return;
304
+
305
+ ApplyBasicActorData(actor, instanceData);
306
+
307
+ for (int i = 0; i < instanceData.actorDialogues.Count && i < actorData.actorDialogues.Count; i++)
308
+ actor.conversations[i].SetTriggered(instanceData.actorDialogues[i].triggered);
309
+
310
+ ApplyActorMaterialInstance(actor, actorData, instanceData);
311
+ }
312
+
313
+ /// <summary>
314
+ ///
315
+ /// </summary>
316
+ /// <param name="actor"></param>
317
+ /// <param name="actorData"></param>
318
+ /// <param name="instanceData"></param>
319
+ protected virtual void ApplyActorMaterialInstance(Actor actor, ActorData actorData, ActorData instanceData)
320
+ {
321
+ Character character = characterDatabase.GetCharacter(actorData.aReference);
322
+
323
+ if (character == null)
324
+ return;
325
+
326
+ UnityEngine.Debug.Log("REPORT: MATERIAL NAME WAS: " + instanceData.matName);
327
+
328
+ for (int i = 0; i < character.Expressions.Count; i++)
329
+ {
330
+ Expression expression = character.Expressions[i];
331
+
332
+ if (instanceData.matName.Contains(expression.Sprite.name))
333
+ {
334
+ ApplyActorMaterial(actor, expression.Sprite);
335
+
336
+ actor.GetComponentInChildren<SpriteRenderer>().sprite = character.Sprites[i].Sprite;
337
+
338
+ break;
339
+ }
340
+ }
341
+ }
342
+
343
+ #endregion
344
+ }
345
345
  }