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.
- package/.attestation.p7m +0 -0
- package/Actor.cs +74 -74
- package/Actor.cs.meta +11 -11
- package/ActorBodyDebugger.cs +117 -117
- package/ActorBodyDebugger.cs.meta +13 -13
- package/ActorManager.cs +149 -149
- package/ActorManager.cs.meta +11 -11
- package/ActorOrganizer.cs +93 -93
- package/ActorOrganizer.cs.meta +11 -11
- package/BasicExpressionChanger.cs +157 -157
- package/BasicExpressionChanger.cs.meta +11 -11
- package/BasicLayerHandler.cs +108 -108
- package/BasicLayerHandler.cs.meta +11 -11
- package/DREditor.Actors.asmdef +20 -20
- package/DREditor.Actors.asmdef.meta +7 -7
- package/Editor/AssignmentStyleGUIEditor.cs +171 -171
- package/Editor/AssignmentStyleGUIEditor.cs.meta +1 -1
- package/Editor/AutoCreateCharacterWizard.cs +475 -475
- package/Editor/AutoCreateCharacterWizard.cs.meta +11 -11
- package/Editor/AutoCreateTrialCharacterWizard.cs +426 -426
- package/Editor/AutoCreateTrialCharacterWizard.cs.meta +1 -1
- package/Editor/CharacterUtility.cs +119 -119
- package/Editor/CharacterUtility.cs.meta +11 -11
- package/Editor/CircleDrawer.cs +206 -206
- package/Editor/CircleDrawer.cs.meta +1 -1
- package/Editor/CircleUtility.cs +54 -54
- package/Editor/CircleUtility.cs.meta +1 -1
- package/Editor/DREditor.Actors.Editor.asmdef +21 -21
- package/Editor/DREditor.Actors.Editor.asmdef.meta +7 -7
- package/Editor/GenerateCharacterIntroDialogues.cs +234 -234
- package/Editor/GenerateCharacterIntroDialogues.cs.meta +11 -11
- package/Editor/IItemImporter.cs +19 -19
- package/Editor/IItemImporter.cs.meta +1 -1
- package/Editor/ItemImporter.cs +170 -170
- package/Editor/ItemImporter.cs.meta +1 -1
- package/Editor/ItemUtility.cs +85 -85
- package/Editor/ItemUtility.cs.meta +11 -11
- package/Editor/ItemWizard.cs +41 -41
- package/Editor/ItemWizard.cs.meta +11 -11
- package/Editor.meta +8 -8
- package/Events/ActorCheckFocusEvent.cs +49 -49
- package/Events/ActorCheckFocusEvent.cs.meta +11 -11
- package/Events/ActorFadeEvent.cs +19 -19
- package/Events/ActorFadeEvent.cs.meta +11 -11
- package/Events/ActorFadeHandler.cs +53 -53
- package/Events/ActorFadeHandler.cs.meta +11 -11
- package/Events/ActorFaintEvent.cs +282 -282
- package/Events/ActorFaintEvent.cs.meta +11 -11
- package/Events/ActorFaintEventRenderQ.cs +65 -65
- package/Events/ActorFaintEventRenderQ.cs.meta +11 -11
- package/Events/ActorLeaveHandler.cs +238 -238
- package/Events/ActorLeaveHandler.cs.meta +11 -11
- package/Events/ActorSpriteFader.cs +190 -190
- package/Events/ActorSpriteFader.cs.meta +11 -11
- package/Events/ActorSpriteFaderRenderQ.cs +49 -49
- package/Events/ActorSpriteFaderRenderQ.cs.meta +11 -11
- package/Events/BSTrialActorFlash.cs +259 -259
- package/Events/BSTrialActorFlash.cs.meta +11 -11
- package/Events/ChangeLastFocusEvent.cs +62 -62
- package/Events/ChangeLastFocusEvent.cs.meta +11 -11
- package/Events/MoveCharacterEvent.cs +141 -141
- package/Events/MoveCharacterEvent.cs.meta +11 -11
- package/Events.meta +8 -8
- package/ExpressionChanger.cs +25 -25
- package/ExpressionChanger.cs.meta +11 -11
- package/FocusHandler.cs +96 -96
- package/FocusHandler.cs.meta +11 -11
- package/Implementation/ActorFocusHandler.cs +195 -195
- package/Implementation/ActorFocusHandler.cs.meta +11 -11
- package/Implementation/ActorFocusLoadEnd.cs +108 -108
- package/Implementation/ActorFocusLoadEnd.cs.meta +11 -11
- package/Implementation/ActorFocusPrepare.cs +102 -102
- package/Implementation/ActorFocusPrepare.cs.meta +11 -11
- package/Implementation/ActorFocusResolve.cs +67 -67
- package/Implementation/ActorFocusResolve.cs.meta +11 -11
- package/Implementation/ActorSpriteChanger.cs +129 -129
- package/Implementation/ActorSpriteChanger.cs.meta +11 -11
- package/Implementation/ActorTrialSpriteChanger.cs +46 -46
- package/Implementation/ActorTrialSpriteChanger.cs.meta +11 -11
- package/Implementation/ChangeLastSpriteEvent.cs +92 -92
- package/Implementation/ChangeLastSpriteEvent.cs.meta +11 -11
- package/Implementation/WorldSpriteChanger.cs +207 -207
- package/Implementation/WorldSpriteChanger.cs.meta +11 -11
- package/Implementation.meta +8 -8
- package/LayerHandler.cs +30 -30
- package/LayerHandler.cs.meta +11 -11
- package/{Samples → Samples~}/Actor.prefab +581 -581
- package/{Samples → Samples~}/Actor.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Body_Debugger.prefab +68 -68
- package/{Samples → Samples~}/Actor_Body_Debugger.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Check_Focus_Event.prefab +47 -47
- package/{Samples → Samples~}/Actor_Check_Focus_Event.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Event_Handlers.prefab +668 -668
- package/{Samples → Samples~}/Actor_Event_Handlers.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Fade_Handler.prefab +137 -137
- package/{Samples → Samples~}/Actor_Fade_Handler.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Fade_Handler_Render_Q.prefab +137 -137
- package/{Samples → Samples~}/Actor_Fade_Handler_Render_Q.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Faint_Event.prefab +71 -71
- package/{Samples → Samples~}/Actor_Faint_Event.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Faint_Event_Render_Q.prefab +73 -73
- package/{Samples → Samples~}/Actor_Faint_Event_Render_Q.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Focus_Handler.prefab +168 -168
- package/{Samples → Samples~}/Actor_Focus_Handler.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Focus_Handler_Shell.prefab +56 -56
- package/{Samples → Samples~}/Actor_Focus_Handler_Shell.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Focus_Load_End.prefab +66 -66
- package/{Samples → Samples~}/Actor_Focus_Load_End.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Focus_Prepare.prefab +49 -49
- package/{Samples → Samples~}/Actor_Focus_Prepare.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Focus_Resolve.prefab +48 -48
- package/{Samples → Samples~}/Actor_Focus_Resolve.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Leave_Handler.prefab +141 -141
- package/{Samples → Samples~}/Actor_Leave_Handler.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Leave_Handler_Render_Q.prefab +141 -141
- package/{Samples → Samples~}/Actor_Leave_Handler_Render_Q.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Organizer.prefab +49 -49
- package/{Samples → Samples~}/Actor_Organizer.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Sprite_Changer.prefab +163 -163
- package/{Samples → Samples~}/Actor_Sprite_Changer.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Sprite_Changer_Shell.prefab +51 -51
- package/{Samples → Samples~}/Actor_Sprite_Changer_Shell.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Sprite_Fader.prefab +52 -52
- package/{Samples → Samples~}/Actor_Sprite_Fader.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Sprite_Fader_Render_Q.prefab +54 -54
- package/{Samples → Samples~}/Actor_Sprite_Fader_Render_Q.prefab.meta +7 -7
- package/{Samples → Samples~}/Actor_Trial_Sprite_Changer.prefab +47 -47
- package/{Samples → Samples~}/Actor_Trial_Sprite_Changer.prefab.meta +7 -7
- package/{Samples → Samples~}/Change_Last_Focus_Event.prefab +66 -66
- package/{Samples → Samples~}/Change_Last_Focus_Event.prefab.meta +7 -7
- package/{Samples → Samples~}/Change_Last_Sprite_Event.prefab +49 -49
- package/{Samples → Samples~}/Change_Last_Sprite_Event.prefab.meta +7 -7
- package/{Samples → Samples~}/Change_Last_World_Sprite_Event.prefab +186 -186
- package/{Samples → Samples~}/Change_Last_World_Sprite_Event.prefab.meta +7 -7
- package/{Samples → Samples~}/Focus_Handler.prefab +49 -49
- package/{Samples → Samples~}/Focus_Handler.prefab.meta +7 -7
- package/{Samples → Samples~}/Move_Character_Event.prefab +51 -51
- package/{Samples → Samples~}/Move_Character_Event.prefab.meta +7 -7
- package/{Samples → Samples~}/World_Sprite_Changer.prefab +51 -51
- package/{Samples → Samples~}/World_Sprite_Changer.prefab.meta +7 -7
- package/package.json +43 -38
- package/package.json.meta +7 -7
- 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
|
}
|