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.
- package/.attestation.p7m +0 -0
- package/DREditor.RoomBuilding.asmdef +28 -28
- package/DREditor.RoomBuilding.asmdef.meta +7 -7
- package/Editor/DREditor.RoomBuilding.Editor.asmdef +19 -19
- package/Editor/DREditor.RoomBuilding.Editor.asmdef.meta +7 -7
- package/Editor/FindCharactersInRoomsWizard.cs +55 -55
- package/Editor/FindCharactersInRoomsWizard.cs.meta +11 -11
- package/Editor/RoomBuilderContainsObjective.cs +38 -38
- package/Editor/RoomBuilderContainsObjective.cs.meta +11 -11
- package/Editor/RoomBuilderScanWizard.cs +90 -90
- package/Editor/RoomBuilderScanWizard.cs.meta +11 -11
- package/Editor/ScanRoomBuilders.cs +74 -74
- package/Editor/ScanRoomBuilders.cs.meta +11 -11
- package/Editor.meta +8 -8
- package/Implementation/Actors/ActorData.cs +115 -115
- package/Implementation/Actors/ActorData.cs.meta +11 -11
- package/Implementation/Actors/ActorStateData.cs +10 -10
- package/Implementation/Actors/ActorStateData.cs.meta +11 -11
- package/Implementation/Actors/ActorStateLoader.cs +344 -344
- package/Implementation/Actors/ActorStateLoader.cs.meta +11 -11
- package/Implementation/Actors/TActorData.cs +35 -35
- package/Implementation/Actors/TActorData.cs.meta +11 -11
- package/Implementation/Actors/TrialActorManager.cs +157 -157
- package/Implementation/Actors/TrialActorManager.cs.meta +11 -11
- package/Implementation/Actors.meta +8 -8
- package/Implementation/DoorLoader.cs +117 -117
- package/Implementation/DoorLoader.cs.meta +11 -11
- package/Implementation/DoorLoaderUtility.cs +51 -51
- package/Implementation/DoorLoaderUtility.cs.meta +11 -11
- package/Implementation/DoorStateData.cs +11 -11
- package/Implementation/DoorStateData.cs.meta +11 -11
- package/Implementation/ItemActorLoader.cs +157 -157
- package/Implementation/ItemActorLoader.cs.meta +11 -11
- package/Implementation/ItemData.cs +67 -67
- package/Implementation/ItemData.cs.meta +11 -11
- package/Implementation/ItemStateData.cs +10 -10
- package/Implementation/ItemStateData.cs.meta +11 -11
- package/Implementation/MoveLoader.cs +67 -67
- package/Implementation/MoveLoader.cs.meta +11 -11
- package/Implementation/MoveStateData.cs +11 -11
- package/Implementation/MoveStateData.cs.meta +11 -11
- package/Implementation/RoomStateHandlerBase.cs +241 -241
- package/Implementation/RoomStateHandlerBase.cs.meta +11 -11
- package/Implementation/SaveableData.cs +56 -56
- package/Implementation/SaveableData.cs.meta +11 -11
- package/Implementation/SaveableDataSet.cs +66 -66
- package/Implementation/SaveableDataSet.cs.meta +11 -11
- package/Implementation/SaveableManager.cs +70 -70
- package/Implementation/SaveableManager.cs.meta +11 -11
- package/Implementation/SaveableStateData.cs +10 -10
- package/Implementation/SaveableStateData.cs.meta +11 -11
- package/Implementation/SpawnableLoader.cs +125 -125
- package/Implementation/SpawnableLoader.cs.meta +11 -11
- package/Implementation/SpawnableStateData.cs +11 -11
- package/Implementation/SpawnableStateData.cs.meta +11 -11
- package/Implementation/StateDataAsset.cs +28 -28
- package/Implementation/StateDataAsset.cs.meta +11 -11
- package/Implementation/SubAreaLoader.cs +108 -108
- package/Implementation/SubAreaLoader.cs.meta +11 -11
- package/Implementation/SubAreaStateData.cs +11 -11
- package/Implementation/SubAreaStateData.cs.meta +11 -11
- package/Implementation/TriggerConverter.cs +137 -137
- package/Implementation/TriggerConverter.cs.meta +11 -11
- package/Implementation/TriggerLoader.cs +295 -295
- package/Implementation/TriggerLoader.cs.meta +11 -11
- package/Implementation/TriggerStateData.cs +18 -18
- package/Implementation/TriggerStateData.cs.meta +11 -11
- package/Implementation.meta +8 -8
- package/InstanceListWrapper.cs +23 -23
- package/InstanceListWrapper.cs.meta +11 -11
- package/Instances/ConvertInstanceData.cs +89 -89
- package/Instances/ConvertInstanceData.cs.meta +11 -11
- package/Instances/InstanceData.cs +43 -43
- package/Instances/InstanceData.cs.meta +11 -11
- package/Instances/InstanceStateData.cs +51 -51
- package/Instances/InstanceStateData.cs.meta +11 -11
- package/Instances/RoomInstanceData.cs +68 -68
- package/Instances/RoomInstanceData.cs.meta +11 -11
- package/Instances/RoomInstanceManager.cs +452 -452
- package/Instances/RoomInstanceManager.cs.meta +11 -11
- package/Instances.meta +8 -8
- package/LoadInvestigationRoomState.cs +53 -53
- package/LoadInvestigationRoomState.cs.meta +11 -11
- package/Old/ActorLoader.cs +382 -382
- package/Old/ActorLoader.cs.meta +11 -11
- package/Old/Room.cs +24 -24
- package/Old/Room.cs.meta +11 -11
- package/Old/RoomBuilder.cs +59 -59
- package/Old/RoomBuilder.cs.meta +11 -11
- package/Old/RoomData.cs +90 -90
- package/Old/RoomData.cs.meta +11 -11
- package/Old/RoomManager.cs +256 -256
- package/Old/RoomManager.cs.meta +11 -11
- package/Old/RoomManagerDisplayEditor.cs +72 -72
- package/Old/RoomManagerDisplayEditor.cs.meta +11 -11
- package/Old/RoomManagerEditor.cs +211 -211
- package/Old/RoomManagerEditor.cs.meta +11 -11
- package/Old/RoomManagerShellDisplayEditor.cs +48 -48
- package/Old/RoomManagerShellDisplayEditor.cs.meta +11 -11
- package/Old/RoomSection.cs +35 -35
- package/Old/RoomSection.cs.meta +11 -11
- package/Old.meta +8 -8
- package/RoomManagerBase.cs +84 -84
- package/RoomManagerBase.cs.meta +11 -11
- package/RoomManagerEditorBase.cs +86 -86
- package/RoomManagerEditorBase.cs.meta +11 -11
- package/RoomManagerEditorCoreBase.cs +159 -159
- package/RoomManagerEditorCoreBase.cs.meta +11 -11
- package/RoomSaveDisplayEditorBase.cs +111 -111
- package/RoomSaveDisplayEditorBase.cs.meta +11 -11
- package/RoomShellDisplayEditorBase.cs +68 -68
- package/RoomShellDisplayEditorBase.cs.meta +11 -11
- package/RoomStateBuilder.cs +53 -53
- package/RoomStateBuilder.cs.meta +11 -11
- package/RoomStateData.cs +58 -58
- package/RoomStateData.cs.meta +11 -11
- package/RoomStateManager.cs +202 -202
- package/RoomStateManager.cs.meta +11 -11
- package/RoomStateManagerEditor.cs +392 -392
- package/RoomStateManagerEditor.cs.meta +11 -11
- package/RoomStateSaveDisplayEditor.cs +175 -175
- package/RoomStateSaveDisplayEditor.cs.meta +11 -11
- package/RoomStateSection.cs +69 -69
- package/RoomStateSection.cs.meta +11 -11
- package/RoomStateShellDisplayEditor.cs +108 -108
- package/RoomStateShellDisplayEditor.cs.meta +11 -11
- package/{Samples → Samples~}/Room_State_Manager.prefab +473 -473
- package/{Samples → Samples~}/Room_State_Manager.prefab.meta +7 -7
- package/{Samples → Samples~}/Trial_Actor_Manager.prefab +51 -51
- package/{Samples → Samples~}/Trial_Actor_Manager.prefab.meta +7 -7
- package/package.json +51 -46
- package/package.json.meta +7 -7
- 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
|
}
|