net.dreditor.actors 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 (143) hide show
  1. package/.attestation.p7m +0 -0
  2. package/Actor.cs +74 -74
  3. package/Actor.cs.meta +11 -11
  4. package/ActorBodyDebugger.cs +117 -117
  5. package/ActorBodyDebugger.cs.meta +13 -13
  6. package/ActorManager.cs +149 -149
  7. package/ActorManager.cs.meta +11 -11
  8. package/ActorOrganizer.cs +93 -93
  9. package/ActorOrganizer.cs.meta +11 -11
  10. package/BasicExpressionChanger.cs +157 -157
  11. package/BasicExpressionChanger.cs.meta +11 -11
  12. package/BasicLayerHandler.cs +108 -108
  13. package/BasicLayerHandler.cs.meta +11 -11
  14. package/DREditor.Actors.asmdef +20 -20
  15. package/DREditor.Actors.asmdef.meta +7 -7
  16. package/Editor/AssignmentStyleGUIEditor.cs +171 -171
  17. package/Editor/AssignmentStyleGUIEditor.cs.meta +1 -1
  18. package/Editor/AutoCreateCharacterWizard.cs +475 -475
  19. package/Editor/AutoCreateCharacterWizard.cs.meta +11 -11
  20. package/Editor/AutoCreateTrialCharacterWizard.cs +426 -426
  21. package/Editor/AutoCreateTrialCharacterWizard.cs.meta +1 -1
  22. package/Editor/CharacterUtility.cs +119 -119
  23. package/Editor/CharacterUtility.cs.meta +11 -11
  24. package/Editor/CircleDrawer.cs +206 -206
  25. package/Editor/CircleDrawer.cs.meta +1 -1
  26. package/Editor/CircleUtility.cs +54 -54
  27. package/Editor/CircleUtility.cs.meta +1 -1
  28. package/Editor/DREditor.Actors.Editor.asmdef +21 -21
  29. package/Editor/DREditor.Actors.Editor.asmdef.meta +7 -7
  30. package/Editor/GenerateCharacterIntroDialogues.cs +234 -234
  31. package/Editor/GenerateCharacterIntroDialogues.cs.meta +11 -11
  32. package/Editor/IItemImporter.cs +19 -19
  33. package/Editor/IItemImporter.cs.meta +1 -1
  34. package/Editor/ItemImporter.cs +170 -170
  35. package/Editor/ItemImporter.cs.meta +1 -1
  36. package/Editor/ItemUtility.cs +85 -85
  37. package/Editor/ItemUtility.cs.meta +11 -11
  38. package/Editor/ItemWizard.cs +41 -41
  39. package/Editor/ItemWizard.cs.meta +11 -11
  40. package/Editor.meta +8 -8
  41. package/Events/ActorCheckFocusEvent.cs +49 -49
  42. package/Events/ActorCheckFocusEvent.cs.meta +11 -11
  43. package/Events/ActorFadeEvent.cs +19 -19
  44. package/Events/ActorFadeEvent.cs.meta +11 -11
  45. package/Events/ActorFadeHandler.cs +53 -53
  46. package/Events/ActorFadeHandler.cs.meta +11 -11
  47. package/Events/ActorFaintEvent.cs +282 -282
  48. package/Events/ActorFaintEvent.cs.meta +11 -11
  49. package/Events/ActorFaintEventRenderQ.cs +65 -65
  50. package/Events/ActorFaintEventRenderQ.cs.meta +11 -11
  51. package/Events/ActorLeaveHandler.cs +238 -238
  52. package/Events/ActorLeaveHandler.cs.meta +11 -11
  53. package/Events/ActorSpriteFader.cs +190 -190
  54. package/Events/ActorSpriteFader.cs.meta +11 -11
  55. package/Events/ActorSpriteFaderRenderQ.cs +49 -49
  56. package/Events/ActorSpriteFaderRenderQ.cs.meta +11 -11
  57. package/Events/BSTrialActorFlash.cs +259 -259
  58. package/Events/BSTrialActorFlash.cs.meta +11 -11
  59. package/Events/ChangeLastFocusEvent.cs +62 -62
  60. package/Events/ChangeLastFocusEvent.cs.meta +11 -11
  61. package/Events/MoveCharacterEvent.cs +141 -141
  62. package/Events/MoveCharacterEvent.cs.meta +11 -11
  63. package/Events.meta +8 -8
  64. package/ExpressionChanger.cs +25 -25
  65. package/ExpressionChanger.cs.meta +11 -11
  66. package/FocusHandler.cs +96 -96
  67. package/FocusHandler.cs.meta +11 -11
  68. package/Implementation/ActorFocusHandler.cs +195 -195
  69. package/Implementation/ActorFocusHandler.cs.meta +11 -11
  70. package/Implementation/ActorFocusLoadEnd.cs +108 -108
  71. package/Implementation/ActorFocusLoadEnd.cs.meta +11 -11
  72. package/Implementation/ActorFocusPrepare.cs +102 -102
  73. package/Implementation/ActorFocusPrepare.cs.meta +11 -11
  74. package/Implementation/ActorFocusResolve.cs +67 -67
  75. package/Implementation/ActorFocusResolve.cs.meta +11 -11
  76. package/Implementation/ActorSpriteChanger.cs +129 -129
  77. package/Implementation/ActorSpriteChanger.cs.meta +11 -11
  78. package/Implementation/ActorTrialSpriteChanger.cs +46 -46
  79. package/Implementation/ActorTrialSpriteChanger.cs.meta +11 -11
  80. package/Implementation/ChangeLastSpriteEvent.cs +92 -92
  81. package/Implementation/ChangeLastSpriteEvent.cs.meta +11 -11
  82. package/Implementation/WorldSpriteChanger.cs +207 -207
  83. package/Implementation/WorldSpriteChanger.cs.meta +11 -11
  84. package/Implementation.meta +8 -8
  85. package/LayerHandler.cs +30 -30
  86. package/LayerHandler.cs.meta +11 -11
  87. package/{Samples → Samples~}/Actor.prefab +581 -581
  88. package/{Samples → Samples~}/Actor.prefab.meta +7 -7
  89. package/{Samples → Samples~}/Actor_Body_Debugger.prefab +68 -68
  90. package/{Samples → Samples~}/Actor_Body_Debugger.prefab.meta +7 -7
  91. package/{Samples → Samples~}/Actor_Check_Focus_Event.prefab +47 -47
  92. package/{Samples → Samples~}/Actor_Check_Focus_Event.prefab.meta +7 -7
  93. package/{Samples → Samples~}/Actor_Event_Handlers.prefab +668 -668
  94. package/{Samples → Samples~}/Actor_Event_Handlers.prefab.meta +7 -7
  95. package/{Samples → Samples~}/Actor_Fade_Handler.prefab +137 -137
  96. package/{Samples → Samples~}/Actor_Fade_Handler.prefab.meta +7 -7
  97. package/{Samples → Samples~}/Actor_Fade_Handler_Render_Q.prefab +137 -137
  98. package/{Samples → Samples~}/Actor_Fade_Handler_Render_Q.prefab.meta +7 -7
  99. package/{Samples → Samples~}/Actor_Faint_Event.prefab +71 -71
  100. package/{Samples → Samples~}/Actor_Faint_Event.prefab.meta +7 -7
  101. package/{Samples → Samples~}/Actor_Faint_Event_Render_Q.prefab +73 -73
  102. package/{Samples → Samples~}/Actor_Faint_Event_Render_Q.prefab.meta +7 -7
  103. package/{Samples → Samples~}/Actor_Focus_Handler.prefab +168 -168
  104. package/{Samples → Samples~}/Actor_Focus_Handler.prefab.meta +7 -7
  105. package/{Samples → Samples~}/Actor_Focus_Handler_Shell.prefab +56 -56
  106. package/{Samples → Samples~}/Actor_Focus_Handler_Shell.prefab.meta +7 -7
  107. package/{Samples → Samples~}/Actor_Focus_Load_End.prefab +66 -66
  108. package/{Samples → Samples~}/Actor_Focus_Load_End.prefab.meta +7 -7
  109. package/{Samples → Samples~}/Actor_Focus_Prepare.prefab +49 -49
  110. package/{Samples → Samples~}/Actor_Focus_Prepare.prefab.meta +7 -7
  111. package/{Samples → Samples~}/Actor_Focus_Resolve.prefab +48 -48
  112. package/{Samples → Samples~}/Actor_Focus_Resolve.prefab.meta +7 -7
  113. package/{Samples → Samples~}/Actor_Leave_Handler.prefab +141 -141
  114. package/{Samples → Samples~}/Actor_Leave_Handler.prefab.meta +7 -7
  115. package/{Samples → Samples~}/Actor_Leave_Handler_Render_Q.prefab +141 -141
  116. package/{Samples → Samples~}/Actor_Leave_Handler_Render_Q.prefab.meta +7 -7
  117. package/{Samples → Samples~}/Actor_Organizer.prefab +49 -49
  118. package/{Samples → Samples~}/Actor_Organizer.prefab.meta +7 -7
  119. package/{Samples → Samples~}/Actor_Sprite_Changer.prefab +163 -163
  120. package/{Samples → Samples~}/Actor_Sprite_Changer.prefab.meta +7 -7
  121. package/{Samples → Samples~}/Actor_Sprite_Changer_Shell.prefab +51 -51
  122. package/{Samples → Samples~}/Actor_Sprite_Changer_Shell.prefab.meta +7 -7
  123. package/{Samples → Samples~}/Actor_Sprite_Fader.prefab +52 -52
  124. package/{Samples → Samples~}/Actor_Sprite_Fader.prefab.meta +7 -7
  125. package/{Samples → Samples~}/Actor_Sprite_Fader_Render_Q.prefab +54 -54
  126. package/{Samples → Samples~}/Actor_Sprite_Fader_Render_Q.prefab.meta +7 -7
  127. package/{Samples → Samples~}/Actor_Trial_Sprite_Changer.prefab +47 -47
  128. package/{Samples → Samples~}/Actor_Trial_Sprite_Changer.prefab.meta +7 -7
  129. package/{Samples → Samples~}/Change_Last_Focus_Event.prefab +66 -66
  130. package/{Samples → Samples~}/Change_Last_Focus_Event.prefab.meta +7 -7
  131. package/{Samples → Samples~}/Change_Last_Sprite_Event.prefab +49 -49
  132. package/{Samples → Samples~}/Change_Last_Sprite_Event.prefab.meta +7 -7
  133. package/{Samples → Samples~}/Change_Last_World_Sprite_Event.prefab +186 -186
  134. package/{Samples → Samples~}/Change_Last_World_Sprite_Event.prefab.meta +7 -7
  135. package/{Samples → Samples~}/Focus_Handler.prefab +49 -49
  136. package/{Samples → Samples~}/Focus_Handler.prefab.meta +7 -7
  137. package/{Samples → Samples~}/Move_Character_Event.prefab +51 -51
  138. package/{Samples → Samples~}/Move_Character_Event.prefab.meta +7 -7
  139. package/{Samples → Samples~}/World_Sprite_Changer.prefab +51 -51
  140. package/{Samples → Samples~}/World_Sprite_Changer.prefab.meta +7 -7
  141. package/package.json +43 -38
  142. package/package.json.meta +7 -7
  143. package/Samples.meta +0 -8
@@ -1,476 +1,476 @@
1
- //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
- using DREditor.Characters;
3
- using DREditor.Editor.Utility;
4
- using System;
5
- using System.Collections.Generic;
6
- using System.Linq;
7
- using UnityEditor;
8
- using UnityEngine;
9
-
10
- namespace DREditor.Actors.Editor
11
- {
12
- /// <summary>
13
- ///
14
- /// </summary>
15
- public class AutoCreateCharacterWizard : ScriptableWizard
16
- {
17
- /// <summary>
18
- ///
19
- /// </summary>
20
- [Header("")]
21
- [Divider]
22
- [Tooltip("")]
23
- [SerializeField] protected CharacterDatabase characterDatabase = null;
24
-
25
- /// <summary>
26
- ///
27
- /// </summary>
28
- [Tooltip("")]
29
- [SerializeField] protected string targetDirectory = "Resources/Characters";
30
-
31
- /// <summary>
32
- ///
33
- /// </summary>
34
- [Tooltip("")]
35
- [SerializeField] protected string firstName = string.Empty;
36
-
37
- /// <summary>
38
- ///
39
- /// </summary>
40
- [Tooltip("")]
41
- [SerializeField] protected string lastName = string.Empty;
42
-
43
- /// <summary>
44
- ///
45
- /// </summary>
46
- [Tooltip("")]
47
- [SerializeField] protected Color color = Color.white;
48
-
49
- /// <summary>
50
- ///
51
- /// </summary>
52
- [Tooltip("")]
53
- [SerializeField] protected Sprite neutralSprite = null;
54
-
55
- /// <summary>
56
- ///
57
- /// </summary>
58
- [Tooltip("")]
59
- [SerializeField] protected Texture2D nameplate = null;
60
-
61
- /// <summary>
62
- ///
63
- /// </summary>
64
- [Tooltip("")]
65
- [SerializeField] protected Shader shader;
66
-
67
- /// <summary>
68
- ///
69
- /// </summary>
70
- [Tooltip("")]
71
- [SerializeField] protected Shader blackShader;
72
-
73
- /// <summary>
74
- ///
75
- /// </summary>
76
- [Tooltip("")]
77
- [SerializeField] protected GameObject actorPrefab = null;
78
-
79
-
80
- /// <summary>
81
- ///
82
- /// </summary>
83
- protected Material blackMaterial = null;
84
-
85
-
86
- [MenuItem("DREditor/Characters/Auto Setup Character")]
87
- public static void ShowWizard() => DisplayWizard<AutoCreateCharacterWizard>("Auto Setup Character", "Create");
88
-
89
- /// <summary>
90
- ///
91
- /// </summary>
92
- protected virtual void OnEnable()
93
- {
94
- shader = Shader.Find("Universal Render Pipeline/Lit");
95
-
96
- blackShader = Shader.Find("Shader Graphs/BlackCutOut");
97
-
98
- actorPrefab = BuilderUtility.FindAssetByType<GameObject>("Actor");
99
-
100
- nameplate = BuilderUtility.FindAssetByType<Texture2D>("Transparent Image");
101
-
102
- characterDatabase = DatabaseUtility.LoadDatabase<CharacterDatabase>();
103
-
104
- if (Selection.objects[0] != null)
105
- neutralSprite = AssetDatabase.LoadAssetAtPath<Sprite>(AssetDatabase.GetAssetPath(Selection.objects[0]));
106
- }
107
-
108
-
109
- protected virtual void OnWizardCreate()
110
- {
111
- using (new AssetDatabase.AssetEditingScope())
112
- AutoCreateCharacter();
113
-
114
- EditorApplication.ExecuteMenuItem("DREditor/Characters/Create Dialogue With All Sprites");
115
- }
116
-
117
-
118
- /// <summary>
119
- ///
120
- /// </summary>
121
- protected virtual void AutoCreateCharacter()
122
- {
123
- try
124
- {
125
- Student student = CreateInstance<Student>();
126
-
127
- CreateStudentAsset(student);
128
-
129
- var materials = CreateMaterials(shader);
130
-
131
- CreateActorPrefab(materials);
132
-
133
- ImportExpressions(student, materials);
134
-
135
- ImportSprites(student);
136
-
137
- Selection.activeObject = student;
138
-
139
- EditorApplication.ExecuteMenuItem("DREditor/Characters/Sort Expressions by their numbers");
140
- }
141
- catch (Exception exception)
142
- {
143
- UnityEngine.Debug.LogException(exception);
144
- }
145
-
146
- UnityEngine.Debug.Log("REPORT: Auto Creation Process Finished.");
147
- }
148
-
149
- #region Create Student Asset
150
-
151
- /// <summary>
152
- ///
153
- /// </summary>
154
- /// <param name="character"></param>
155
- protected virtual void CreateStudentAsset(Character character)
156
- {
157
- if (firstName != "")
158
- {
159
- SpawnStudentAsset(character);
160
-
161
- FillOutStudentData(character);
162
-
163
- AddCharacterToDatabase(character);
164
- }
165
- }
166
-
167
- /// <summary>
168
- ///
169
- /// </summary>
170
- /// <param name="character"></param>
171
- protected virtual void SpawnStudentAsset(Character character)
172
- {
173
- string folder = FolderUtility.CreateIntermediateFolders(targetDirectory);
174
-
175
- string stuPath = folder + "/" + firstName + ".asset";
176
-
177
- AssetDatabase.CreateAsset(character, stuPath);
178
- }
179
-
180
- /// <summary>
181
- ///
182
- /// </summary>
183
- /// <param name="character"></param>
184
- protected virtual void FillOutStudentData(Character character)
185
- {
186
- character.FirstName = firstName;
187
-
188
- character.LastName = lastName;
189
-
190
- character.Nameplate = nameplate;
191
-
192
- if (character is Student student)
193
- student.StudentCard.Color = color;
194
- }
195
-
196
- /// <summary>
197
- ///
198
- /// </summary>
199
- /// <param name="character"></param>
200
- protected virtual void AddCharacterToDatabase(Character character)
201
- {
202
- if (characterDatabase == null && BuilderUtility.FindAssetByType<CharacterDatabase>() == null)
203
- {
204
- string folder = FolderUtility.CreateIntermediateFolders(targetDirectory);
205
-
206
- CharacterDatabase characterDatabase = CreateInstance<CharacterDatabase>();
207
-
208
- string stuPath = folder + "/CharacterDatabase.asset";
209
-
210
- AssetDatabase.CreateAsset(characterDatabase, stuPath);
211
-
212
- AssetDatabase.SaveAssets();
213
-
214
- this.characterDatabase = characterDatabase;
215
- }
216
-
217
- characterDatabase.Characters.Add(character);
218
-
219
- EditorUtility.SetDirty(characterDatabase);
220
- }
221
-
222
- #endregion
223
-
224
- #region Create Materials
225
-
226
- /// <summary>
227
- ///
228
- /// </summary>
229
- /// <param name="shader"></param>
230
- /// <param name="spriteList"></param>
231
- /// <returns></returns>
232
- protected virtual List<Material> CreateMaterials(Shader shader, List<Texture> spriteList = null)
233
- {
234
- List<Material> materials = new();
235
-
236
- try
237
- {
238
- IEnumerable<Texture> textures = spriteList
239
- ?? Selection.GetFiltered(typeof(Texture), SelectionMode.Assets).Cast<Texture>();
240
-
241
- foreach (Texture texture in textures)
242
- if (CreateMaterialFromTexture(texture, shader) is Material material)
243
- materials.Add(material);
244
- }
245
- catch (Exception exception)
246
- {
247
- UnityEngine.Debug.LogWarning("ALERT: Something went wrong creating materials.");
248
-
249
- UnityEngine.Debug.LogException(exception);
250
- }
251
-
252
- return materials;
253
- }
254
-
255
- /// <summary>
256
- ///
257
- /// </summary>
258
- /// <param name="texture"></param>
259
- /// <param name="shader"></param>
260
- /// <returns></returns>
261
- protected virtual Material CreateMaterialFromTexture(Texture texture, Shader shader)
262
- {
263
- Material material = new(shader)
264
- {
265
- mainTexture = texture
266
- };
267
-
268
- string path = PopulateShadersAndMaterialPath(material, texture, shader);
269
-
270
- if (string.IsNullOrEmpty(path))
271
- return null;
272
- else
273
- AssetDatabase.CreateAsset(material, path);
274
-
275
- return material;
276
- }
277
-
278
- /// <summary>
279
- ///
280
- /// </summary>
281
- /// <param name="material"></param>
282
- /// <param name="texture"></param>
283
- /// <param name="shader"></param>
284
- /// <returns></returns>
285
- protected virtual string PopulateShadersAndMaterialPath(Material material, Texture texture, Shader shader)
286
- {
287
- string path = AssetDatabase.GetAssetPath(texture);
288
-
289
- path = path[..path.LastIndexOf(".")] + ".mat";
290
-
291
- if (shader.name == "Universal Render Pipeline/Lit")
292
- {
293
- material.SetFloat("_Smoothness", 0);
294
-
295
- material.SetFloat("_AlphaClip", 1);
296
-
297
- material.SetFloat("_Cutoff", 0.5f);
298
-
299
- material.EnableKeyword("_ALPHATEST_ON");
300
- }
301
-
302
- if (shader.name == "Shader Graphs/BlackCutOut")
303
- {
304
- material.SetColor("_Color", new Color(0, 0, 0));
305
-
306
- path = path.Replace(texture.name, texture.name + "b");
307
-
308
- material.name += "b";
309
- }
310
-
311
- if (AssetDatabase.LoadAssetAtPath(path, typeof(Material)) != null)
312
- {
313
- UnityEngine.Debug.LogWarning("ALERT: Can't create material, it already exists: " + path);
314
-
315
- return "";
316
- }
317
-
318
- return path;
319
- }
320
-
321
- #endregion
322
-
323
- #region Create Actor Prefab
324
-
325
- /// <summary>
326
- ///
327
- /// </summary>
328
- /// <param name="materials"></param>
329
- protected virtual void CreateActorPrefab(List<Material> materials)
330
- {
331
- if (neutralSprite != null)
332
- {
333
- int i = 0;
334
-
335
- foreach (Material material in materials)
336
- if (material.name == neutralSprite.name)
337
- i = materials.IndexOf(material);
338
-
339
- Material neutralMat = materials[i];
340
-
341
- materials.Remove(neutralMat);
342
-
343
- materials.Insert(0, neutralMat);
344
-
345
- blackMaterial = CreateMaterials(blackShader, new List<Texture>() { materials[0].mainTexture })[0];
346
-
347
- if (actorPrefab != null)
348
- SpawnActorPrefab(materials);
349
- }
350
- }
351
-
352
- /// <summary>
353
- ///
354
- /// </summary>
355
- /// <param name="materials"></param>
356
- protected virtual void SpawnActorPrefab(List<Material> materials)
357
- {
358
- GameObject actorPrefabInstance = PrefabUtility.InstantiatePrefab(actorPrefab) as GameObject;
359
-
360
- if (actorPrefabInstance.TryGetComponent<Actor>(out var actor))
361
- {
362
- actor.DisplayName = firstName + " " + lastName;
363
-
364
- var meshes = actor.GetComponentsInChildren<MeshRenderer>();
365
-
366
- var sprites = actor.GetComponentsInChildren<SpriteRenderer>();
367
-
368
- actorPrefabInstance.name = firstName;
369
-
370
- meshes[0].material = materials[0];
371
-
372
- meshes[1].material = blackMaterial;
373
-
374
- sprites[0].sprite = neutralSprite;
375
-
376
- sprites[1].sprite = neutralSprite;
377
-
378
- sprites[0].transform.position = new(0, 1.5f, 0);
379
-
380
- actorPrefabInstance.transform.position = new(0, 0.27f, 0);
381
-
382
- EditorUtility.SetDirty(actor);
383
-
384
- EditorUtility.SetDirty(actorPrefabInstance);
385
- }
386
- }
387
-
388
- #endregion
389
-
390
- #region Import Expressions and Sprites
391
-
392
- /// <summary>
393
- ///
394
- /// </summary>
395
- /// <param name="character"></param>
396
- /// <param name="materials"></param>
397
- protected virtual void ImportExpressions(Character character, List<Material> materials = null)
398
- {
399
- if (firstName == "")
400
- return;
401
-
402
- var selectedMaterials = materials
403
- ?? Selection.GetFiltered(typeof(Material), SelectionMode.Assets).Cast<Material>().ToList();
404
-
405
- UnityEngine.Debug.Log("REPORT: Imported material count is: " + selectedMaterials.Count);
406
-
407
- foreach (var material in selectedMaterials)
408
- {
409
- if (material == null)
410
- continue;
411
-
412
- string expressionName = material.name
413
- .Replace("_", "")
414
- .Replace(" ", "")
415
- .Replace("-", "")
416
- .Replace(firstName, "");
417
-
418
- Expression expression = new(expressionName, material);
419
-
420
- character.Expressions.Add(expression);
421
-
422
- character.Sprites.Add(new Unlit(expression.Name));
423
- }
424
-
425
- character.BlackExpression = blackMaterial;
426
- }
427
-
428
- /// <summary>
429
- ///
430
- /// </summary>
431
- /// <param name="character"></param>
432
- /// <param name="sprites"></param>
433
- protected virtual void ImportSprites(Character character, List<Sprite> sprites = null)
434
- {
435
- if (firstName == "")
436
- return;
437
-
438
- List<Texture2D> selectedTextures = sprites?.Cast<Texture2D>().ToList()
439
- ?? Selection.GetFiltered(typeof(Texture2D), SelectionMode.Assets).Cast<Texture2D>().ToList();
440
-
441
- UnityEngine.Debug.Log("REPORT: Imported texture count is: " + selectedTextures.Count);
442
-
443
- SetCharacterSprites(character, selectedTextures);
444
- }
445
-
446
- /// <summary>
447
- ///
448
- /// </summary>
449
- /// <param name="character"></param>
450
- /// <param name="selectedTextures"></param>
451
- protected virtual void SetCharacterSprites(Character character, List<Texture2D> selectedTextures)
452
- {
453
- List<Sprite> selectedSprites = new();
454
-
455
- for (int i = 0; i < selectedTextures.Count; i++)
456
- selectedSprites.Add(AssetDatabase.LoadAssetAtPath<Sprite>(AssetDatabase.GetAssetPath(selectedTextures[i])));
457
-
458
- for (int i = 0; i < character.Sprites.Count; i++)
459
- {
460
- for (int x = 0; x < selectedSprites.Count; x++)
461
- {
462
- if (character.Expressions[i].Sprite.name == selectedSprites[x].name)
463
- {
464
- character.Sprites[i].SetSprite(selectedSprites[x]);
465
-
466
- UnityEngine.Debug.Log("REPORT: Successfully Loaded " + selectedSprites[x].name);
467
-
468
- break;
469
- }
470
- }
471
- }
472
- }
473
-
474
- #endregion
475
- }
1
+ //Author: Benjamin "Sweden" Jillson : Discord: sweden_gaming For Project Eden's Garden
2
+ using DREditor.Characters;
3
+ using DREditor.Editor.Utility;
4
+ using System;
5
+ using System.Collections.Generic;
6
+ using System.Linq;
7
+ using UnityEditor;
8
+ using UnityEngine;
9
+
10
+ namespace DREditor.Actors.Editor
11
+ {
12
+ /// <summary>
13
+ ///
14
+ /// </summary>
15
+ public class AutoCreateCharacterWizard : ScriptableWizard
16
+ {
17
+ /// <summary>
18
+ ///
19
+ /// </summary>
20
+ [Header("")]
21
+ [Divider]
22
+ [Tooltip("")]
23
+ [SerializeField] protected CharacterDatabase characterDatabase = null;
24
+
25
+ /// <summary>
26
+ ///
27
+ /// </summary>
28
+ [Tooltip("")]
29
+ [SerializeField] protected string targetDirectory = "Resources/Characters";
30
+
31
+ /// <summary>
32
+ ///
33
+ /// </summary>
34
+ [Tooltip("")]
35
+ [SerializeField] protected string firstName = string.Empty;
36
+
37
+ /// <summary>
38
+ ///
39
+ /// </summary>
40
+ [Tooltip("")]
41
+ [SerializeField] protected string lastName = string.Empty;
42
+
43
+ /// <summary>
44
+ ///
45
+ /// </summary>
46
+ [Tooltip("")]
47
+ [SerializeField] protected Color color = Color.white;
48
+
49
+ /// <summary>
50
+ ///
51
+ /// </summary>
52
+ [Tooltip("")]
53
+ [SerializeField] protected Sprite neutralSprite = null;
54
+
55
+ /// <summary>
56
+ ///
57
+ /// </summary>
58
+ [Tooltip("")]
59
+ [SerializeField] protected Texture2D nameplate = null;
60
+
61
+ /// <summary>
62
+ ///
63
+ /// </summary>
64
+ [Tooltip("")]
65
+ [SerializeField] protected Shader shader;
66
+
67
+ /// <summary>
68
+ ///
69
+ /// </summary>
70
+ [Tooltip("")]
71
+ [SerializeField] protected Shader blackShader;
72
+
73
+ /// <summary>
74
+ ///
75
+ /// </summary>
76
+ [Tooltip("")]
77
+ [SerializeField] protected GameObject actorPrefab = null;
78
+
79
+
80
+ /// <summary>
81
+ ///
82
+ /// </summary>
83
+ protected Material blackMaterial = null;
84
+
85
+
86
+ [MenuItem("DREditor/Characters/Auto Setup Character")]
87
+ public static void ShowWizard() => DisplayWizard<AutoCreateCharacterWizard>("Auto Setup Character", "Create");
88
+
89
+ /// <summary>
90
+ ///
91
+ /// </summary>
92
+ protected virtual void OnEnable()
93
+ {
94
+ shader = Shader.Find("Universal Render Pipeline/Lit");
95
+
96
+ blackShader = Shader.Find("Shader Graphs/BlackCutOut");
97
+
98
+ actorPrefab = BuilderUtility.FindAssetByType<GameObject>("Actor");
99
+
100
+ nameplate = BuilderUtility.FindAssetByType<Texture2D>("Transparent Image");
101
+
102
+ characterDatabase = DatabaseUtility.LoadDatabase<CharacterDatabase>();
103
+
104
+ if (Selection.objects[0] != null)
105
+ neutralSprite = AssetDatabase.LoadAssetAtPath<Sprite>(AssetDatabase.GetAssetPath(Selection.objects[0]));
106
+ }
107
+
108
+
109
+ protected virtual void OnWizardCreate()
110
+ {
111
+ using (new AssetDatabase.AssetEditingScope())
112
+ AutoCreateCharacter();
113
+
114
+ EditorApplication.ExecuteMenuItem("DREditor/Characters/Create Dialogue With All Sprites");
115
+ }
116
+
117
+
118
+ /// <summary>
119
+ ///
120
+ /// </summary>
121
+ protected virtual void AutoCreateCharacter()
122
+ {
123
+ try
124
+ {
125
+ Student student = CreateInstance<Student>();
126
+
127
+ CreateStudentAsset(student);
128
+
129
+ var materials = CreateMaterials(shader);
130
+
131
+ CreateActorPrefab(materials);
132
+
133
+ ImportExpressions(student, materials);
134
+
135
+ ImportSprites(student);
136
+
137
+ Selection.activeObject = student;
138
+
139
+ EditorApplication.ExecuteMenuItem("DREditor/Characters/Sort Expressions by their numbers");
140
+ }
141
+ catch (Exception exception)
142
+ {
143
+ UnityEngine.Debug.LogException(exception);
144
+ }
145
+
146
+ UnityEngine.Debug.Log("REPORT: Auto Creation Process Finished.");
147
+ }
148
+
149
+ #region Create Student Asset
150
+
151
+ /// <summary>
152
+ ///
153
+ /// </summary>
154
+ /// <param name="character"></param>
155
+ protected virtual void CreateStudentAsset(Character character)
156
+ {
157
+ if (firstName != "")
158
+ {
159
+ SpawnStudentAsset(character);
160
+
161
+ FillOutStudentData(character);
162
+
163
+ AddCharacterToDatabase(character);
164
+ }
165
+ }
166
+
167
+ /// <summary>
168
+ ///
169
+ /// </summary>
170
+ /// <param name="character"></param>
171
+ protected virtual void SpawnStudentAsset(Character character)
172
+ {
173
+ string folder = FolderUtility.CreateIntermediateFolders(targetDirectory);
174
+
175
+ string stuPath = folder + "/" + firstName + ".asset";
176
+
177
+ AssetDatabase.CreateAsset(character, stuPath);
178
+ }
179
+
180
+ /// <summary>
181
+ ///
182
+ /// </summary>
183
+ /// <param name="character"></param>
184
+ protected virtual void FillOutStudentData(Character character)
185
+ {
186
+ character.FirstName = firstName;
187
+
188
+ character.LastName = lastName;
189
+
190
+ character.Nameplate = nameplate;
191
+
192
+ if (character is Student student)
193
+ student.StudentCard.Color = color;
194
+ }
195
+
196
+ /// <summary>
197
+ ///
198
+ /// </summary>
199
+ /// <param name="character"></param>
200
+ protected virtual void AddCharacterToDatabase(Character character)
201
+ {
202
+ if (characterDatabase == null && BuilderUtility.FindAssetByType<CharacterDatabase>() == null)
203
+ {
204
+ string folder = FolderUtility.CreateIntermediateFolders(targetDirectory);
205
+
206
+ CharacterDatabase characterDatabase = CreateInstance<CharacterDatabase>();
207
+
208
+ string stuPath = folder + "/CharacterDatabase.asset";
209
+
210
+ AssetDatabase.CreateAsset(characterDatabase, stuPath);
211
+
212
+ AssetDatabase.SaveAssets();
213
+
214
+ this.characterDatabase = characterDatabase;
215
+ }
216
+
217
+ characterDatabase.Characters.Add(character);
218
+
219
+ EditorUtility.SetDirty(characterDatabase);
220
+ }
221
+
222
+ #endregion
223
+
224
+ #region Create Materials
225
+
226
+ /// <summary>
227
+ ///
228
+ /// </summary>
229
+ /// <param name="shader"></param>
230
+ /// <param name="spriteList"></param>
231
+ /// <returns></returns>
232
+ protected virtual List<Material> CreateMaterials(Shader shader, List<Texture> spriteList = null)
233
+ {
234
+ List<Material> materials = new();
235
+
236
+ try
237
+ {
238
+ IEnumerable<Texture> textures = spriteList
239
+ ?? Selection.GetFiltered(typeof(Texture), SelectionMode.Assets).Cast<Texture>();
240
+
241
+ foreach (Texture texture in textures)
242
+ if (CreateMaterialFromTexture(texture, shader) is Material material)
243
+ materials.Add(material);
244
+ }
245
+ catch (Exception exception)
246
+ {
247
+ UnityEngine.Debug.LogWarning("ALERT: Something went wrong creating materials.");
248
+
249
+ UnityEngine.Debug.LogException(exception);
250
+ }
251
+
252
+ return materials;
253
+ }
254
+
255
+ /// <summary>
256
+ ///
257
+ /// </summary>
258
+ /// <param name="texture"></param>
259
+ /// <param name="shader"></param>
260
+ /// <returns></returns>
261
+ protected virtual Material CreateMaterialFromTexture(Texture texture, Shader shader)
262
+ {
263
+ Material material = new(shader)
264
+ {
265
+ mainTexture = texture
266
+ };
267
+
268
+ string path = PopulateShadersAndMaterialPath(material, texture, shader);
269
+
270
+ if (string.IsNullOrEmpty(path))
271
+ return null;
272
+ else
273
+ AssetDatabase.CreateAsset(material, path);
274
+
275
+ return material;
276
+ }
277
+
278
+ /// <summary>
279
+ ///
280
+ /// </summary>
281
+ /// <param name="material"></param>
282
+ /// <param name="texture"></param>
283
+ /// <param name="shader"></param>
284
+ /// <returns></returns>
285
+ protected virtual string PopulateShadersAndMaterialPath(Material material, Texture texture, Shader shader)
286
+ {
287
+ string path = AssetDatabase.GetAssetPath(texture);
288
+
289
+ path = path[..path.LastIndexOf(".")] + ".mat";
290
+
291
+ if (shader.name == "Universal Render Pipeline/Lit")
292
+ {
293
+ material.SetFloat("_Smoothness", 0);
294
+
295
+ material.SetFloat("_AlphaClip", 1);
296
+
297
+ material.SetFloat("_Cutoff", 0.5f);
298
+
299
+ material.EnableKeyword("_ALPHATEST_ON");
300
+ }
301
+
302
+ if (shader.name == "Shader Graphs/BlackCutOut")
303
+ {
304
+ material.SetColor("_Color", new Color(0, 0, 0));
305
+
306
+ path = path.Replace(texture.name, texture.name + "b");
307
+
308
+ material.name += "b";
309
+ }
310
+
311
+ if (AssetDatabase.LoadAssetAtPath(path, typeof(Material)) != null)
312
+ {
313
+ UnityEngine.Debug.LogWarning("ALERT: Can't create material, it already exists: " + path);
314
+
315
+ return "";
316
+ }
317
+
318
+ return path;
319
+ }
320
+
321
+ #endregion
322
+
323
+ #region Create Actor Prefab
324
+
325
+ /// <summary>
326
+ ///
327
+ /// </summary>
328
+ /// <param name="materials"></param>
329
+ protected virtual void CreateActorPrefab(List<Material> materials)
330
+ {
331
+ if (neutralSprite != null)
332
+ {
333
+ int i = 0;
334
+
335
+ foreach (Material material in materials)
336
+ if (material.name == neutralSprite.name)
337
+ i = materials.IndexOf(material);
338
+
339
+ Material neutralMat = materials[i];
340
+
341
+ materials.Remove(neutralMat);
342
+
343
+ materials.Insert(0, neutralMat);
344
+
345
+ blackMaterial = CreateMaterials(blackShader, new List<Texture>() { materials[0].mainTexture })[0];
346
+
347
+ if (actorPrefab != null)
348
+ SpawnActorPrefab(materials);
349
+ }
350
+ }
351
+
352
+ /// <summary>
353
+ ///
354
+ /// </summary>
355
+ /// <param name="materials"></param>
356
+ protected virtual void SpawnActorPrefab(List<Material> materials)
357
+ {
358
+ GameObject actorPrefabInstance = PrefabUtility.InstantiatePrefab(actorPrefab) as GameObject;
359
+
360
+ if (actorPrefabInstance.TryGetComponent<Actor>(out var actor))
361
+ {
362
+ actor.DisplayName = firstName + " " + lastName;
363
+
364
+ var meshes = actor.GetComponentsInChildren<MeshRenderer>();
365
+
366
+ var sprites = actor.GetComponentsInChildren<SpriteRenderer>();
367
+
368
+ actorPrefabInstance.name = firstName;
369
+
370
+ meshes[0].material = materials[0];
371
+
372
+ meshes[1].material = blackMaterial;
373
+
374
+ sprites[0].sprite = neutralSprite;
375
+
376
+ sprites[1].sprite = neutralSprite;
377
+
378
+ sprites[0].transform.position = new(0, 1.5f, 0);
379
+
380
+ actorPrefabInstance.transform.position = new(0, 0.27f, 0);
381
+
382
+ EditorUtility.SetDirty(actor);
383
+
384
+ EditorUtility.SetDirty(actorPrefabInstance);
385
+ }
386
+ }
387
+
388
+ #endregion
389
+
390
+ #region Import Expressions and Sprites
391
+
392
+ /// <summary>
393
+ ///
394
+ /// </summary>
395
+ /// <param name="character"></param>
396
+ /// <param name="materials"></param>
397
+ protected virtual void ImportExpressions(Character character, List<Material> materials = null)
398
+ {
399
+ if (firstName == "")
400
+ return;
401
+
402
+ var selectedMaterials = materials
403
+ ?? Selection.GetFiltered(typeof(Material), SelectionMode.Assets).Cast<Material>().ToList();
404
+
405
+ UnityEngine.Debug.Log("REPORT: Imported material count is: " + selectedMaterials.Count);
406
+
407
+ foreach (var material in selectedMaterials)
408
+ {
409
+ if (material == null)
410
+ continue;
411
+
412
+ string expressionName = material.name
413
+ .Replace("_", "")
414
+ .Replace(" ", "")
415
+ .Replace("-", "")
416
+ .Replace(firstName, "");
417
+
418
+ Expression expression = new(expressionName, material);
419
+
420
+ character.Expressions.Add(expression);
421
+
422
+ character.Sprites.Add(new Unlit(expression.Name));
423
+ }
424
+
425
+ character.BlackExpression = blackMaterial;
426
+ }
427
+
428
+ /// <summary>
429
+ ///
430
+ /// </summary>
431
+ /// <param name="character"></param>
432
+ /// <param name="sprites"></param>
433
+ protected virtual void ImportSprites(Character character, List<Sprite> sprites = null)
434
+ {
435
+ if (firstName == "")
436
+ return;
437
+
438
+ List<Texture2D> selectedTextures = sprites?.Cast<Texture2D>().ToList()
439
+ ?? Selection.GetFiltered(typeof(Texture2D), SelectionMode.Assets).Cast<Texture2D>().ToList();
440
+
441
+ UnityEngine.Debug.Log("REPORT: Imported texture count is: " + selectedTextures.Count);
442
+
443
+ SetCharacterSprites(character, selectedTextures);
444
+ }
445
+
446
+ /// <summary>
447
+ ///
448
+ /// </summary>
449
+ /// <param name="character"></param>
450
+ /// <param name="selectedTextures"></param>
451
+ protected virtual void SetCharacterSprites(Character character, List<Texture2D> selectedTextures)
452
+ {
453
+ List<Sprite> selectedSprites = new();
454
+
455
+ for (int i = 0; i < selectedTextures.Count; i++)
456
+ selectedSprites.Add(AssetDatabase.LoadAssetAtPath<Sprite>(AssetDatabase.GetAssetPath(selectedTextures[i])));
457
+
458
+ for (int i = 0; i < character.Sprites.Count; i++)
459
+ {
460
+ for (int x = 0; x < selectedSprites.Count; x++)
461
+ {
462
+ if (character.Expressions[i].Sprite.name == selectedSprites[x].name)
463
+ {
464
+ character.Sprites[i].SetSprite(selectedSprites[x]);
465
+
466
+ UnityEngine.Debug.Log("REPORT: Successfully Loaded " + selectedSprites[x].name);
467
+
468
+ break;
469
+ }
470
+ }
471
+ }
472
+ }
473
+
474
+ #endregion
475
+ }
476
476
  }