Skip to content

Commit e80d3ec

Browse files
[Resources] Add fix for guid when loading meshes and when loading mesh assets;
[Editor] Refactor for Editor GUI to reduce ImGui code;
1 parent 41f6d81 commit e80d3ec

File tree

9 files changed

+428
-356
lines changed

9 files changed

+428
-356
lines changed

Engine/Core/Resources/ResourceManager.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,7 +1081,7 @@ public Mesh LoadMesh(string guid, bool ignoreCache = false)
10811081

10821082
mesh = new Mesh(true, false)
10831083
{
1084-
Guid = original,
1084+
Guid = (original.Contains('/') || original.Contains('\\')) ? $"{asset.Guid}:{index}" : original,
10851085
vertices = m.vertices.ToArray(),
10861086
normals = m.normals.ToArray(),
10871087
tangents = m.tangents.ToArray(),
@@ -1181,7 +1181,10 @@ public MeshAsset LoadMeshAsset(string path, bool ignoreCache = false)
11811181
return null;
11821182
}
11831183

1184-
var asset = new MeshAsset();
1184+
var asset = new MeshAsset()
1185+
{
1186+
Guid = guid,
1187+
};
11851188

11861189
foreach(var m in meshAssetData.meshes)
11871190
{

Engine/Editor/Editors/Assets/SpriteAnimationEditor.cs

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using ImGuiNET;
2-
using Staple.Internal;
1+
using Staple.Internal;
32
using System.IO;
43
using System.Numerics;
54
using System.Reflection;
@@ -25,52 +24,51 @@ public override bool RenderField(FieldInfo field)
2524
asset.frames.Add(0);
2625
}
2726

28-
ImGui.BeginGroup();
29-
30-
for(var i = 0; i < asset.frames.Count; i++)
27+
EditorGUI.Group(() =>
3128
{
32-
var frame = asset.frames[i];
33-
var frameIndex = i;
34-
35-
if(EditorGUI.Button("-"))
29+
for (var i = 0; i < asset.frames.Count; i++)
3630
{
37-
asset.frames.RemoveAt(i);
31+
var frame = asset.frames[i];
32+
var frameIndex = i;
3833

39-
break;
40-
}
34+
if (EditorGUI.Button("-"))
35+
{
36+
asset.frames.RemoveAt(i);
4137

42-
EditorGUI.SameLine();
38+
break;
39+
}
4340

44-
if (frame >= 0 && frame < asset.texture.metadata.sprites.Count)
45-
{
46-
var sprite = asset.texture.metadata.sprites[frame];
41+
EditorGUI.SameLine();
4742

48-
EditorGUI.TextureRect(asset.texture, sprite.rect, new Vector2(32, 32), sprite.rotation);
49-
}
50-
else
51-
{
52-
EditorGUI.Label("(none)");
53-
}
43+
if (frame >= 0 && frame < asset.texture.metadata.sprites.Count)
44+
{
45+
var sprite = asset.texture.metadata.sprites[frame];
5446

55-
EditorGUI.SameLine();
47+
EditorGUI.TextureRect(asset.texture, sprite.rect, new Vector2(32, 32), sprite.rotation);
48+
}
49+
else
50+
{
51+
EditorGUI.Label("(none)");
52+
}
5653

57-
if (EditorGUI.Button($"O##SpritePicker{i}"))
58-
{
59-
var editor = StapleEditor.instance;
60-
var assetPath = AssetSerialization.GetAssetPathFromCache(AssetDatabase.GetAssetPath(asset.texture.Guid));
54+
EditorGUI.SameLine();
6155

62-
if (assetPath != asset.texture.guid && Path.IsPathRooted(assetPath) == false)
56+
if (EditorGUI.Button("O"))
6357
{
64-
assetPath = $"Assets{Path.DirectorySeparatorChar}{assetPath}";
65-
}
58+
var editor = StapleEditor.instance;
59+
var assetPath = AssetSerialization.GetAssetPathFromCache(AssetDatabase.GetAssetPath(asset.texture.Guid));
6660

67-
editor.ShowSpritePicker(ThumbnailCache.GetTexture(assetPath) ?? asset.texture,
68-
asset.texture.metadata.sprites,
69-
(index) => asset.frames[frameIndex] = index);
70-
}
71-
}
61+
if (assetPath != asset.texture.guid && Path.IsPathRooted(assetPath) == false)
62+
{
63+
assetPath = $"Assets{Path.DirectorySeparatorChar}{assetPath}";
64+
}
7265

73-
ImGui.EndGroup();
66+
editor.ShowSpritePicker(ThumbnailCache.GetTexture(assetPath) ?? asset.texture,
67+
asset.texture.metadata.sprites,
68+
(index) => asset.frames[frameIndex] = index);
69+
}
70+
}
71+
});
7472
}
7573

7674
return true;

Engine/Editor/Editors/Assets/TextureAssetEditor.cs

Lines changed: 31 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using ImGuiNET;
21
using Newtonsoft.Json;
32
using Newtonsoft.Json.Converters;
43
using Staple.Internal;
@@ -94,30 +93,25 @@ public override bool RenderField(FieldInfo field)
9493

9594
case nameof(TextureMetadata.overrides):
9695

97-
if (ImGui.BeginTabBar($"##{metadata.guid}_OVERRIDES"))
9896
{
9997
var platformTypes = Enum.GetValues<AppPlatform>();
10098

101-
foreach (var platform in platformTypes)
99+
EditorGUI.TabBar(platformTypes.Select(x => x.ToString()).ToArray(), (tabIndex) =>
102100
{
103-
if (ImGui.BeginTabItem(platform.ToString()))
104-
{
105-
var overrides = metadata.overrides;
101+
var platform = platformTypes[tabIndex];
102+
var overrides = metadata.overrides;
106103

107-
if (overrides.TryGetValue(platform, out var item) == false)
108-
{
109-
item = new();
104+
if (overrides.TryGetValue(platform, out var item) == false)
105+
{
106+
item = new();
110107

111-
overrides.Add(platform, item);
112-
}
108+
overrides.Add(platform, item);
109+
}
113110

114-
item.shouldOverride = EditorGUI.Toggle("Override", item.shouldOverride);
115-
116-
if (item.shouldOverride == false)
117-
{
118-
ImGui.BeginDisabled();
119-
}
111+
item.shouldOverride = EditorGUI.Toggle("Override", item.shouldOverride);
120112

113+
EditorGUI.Disabled(item.shouldOverride == false, () =>
114+
{
121115
var format = item.shouldOverride ? item.format : metadata.format;
122116

123117
var quality = item.shouldOverride ? item.quality : metadata.quality;
@@ -146,23 +140,15 @@ public override bool RenderField(FieldInfo field)
146140

147141
premultiplyAlpha = EditorGUI.Toggle("Premultiply Alpha", premultiplyAlpha);
148142

149-
if (item.shouldOverride == false)
150-
{
151-
ImGui.EndDisabled();
152-
}
153-
else
143+
if (item.shouldOverride)
154144
{
155145
item.format = format;
156146
item.quality = quality;
157147
item.maxSize = maxSize;
158148
item.premultiplyAlpha = premultiplyAlpha;
159149
}
160-
161-
ImGui.EndTabItem();
162-
}
163-
}
164-
165-
ImGui.EndTabBar();
150+
});
151+
});
166152
}
167153

168154
return true;
@@ -285,17 +271,17 @@ public override void OnInspectorGUI()
285271
{
286272
void DrawTexture(Texture texture, long diskSize, uint VRAMSize, List<TextureSpriteInfo> sprites, bool isOriginal)
287273
{
288-
var width = ImGui.GetContentRegionAvail().X;
274+
var width = EditorGUI.RemainingHorizontalSpace();
289275

290276
var aspect = texture.Width / (float)texture.Height;
291277

292278
var height = width / aspect;
293279

294-
var currentCursor = ImGui.GetCursorScreenPos();
280+
var currentCursor = EditorGUI.CurrentGUICursorPosition();
295281

296282
EditorGUI.Texture(texture, new Vector2(width, height));
297283

298-
var textureCursor = ImGui.GetCursorScreenPos();
284+
var textureCursor = EditorGUI.CurrentGUICursorPosition();
299285

300286
if (metadata.type == TextureType.Sprite)
301287
{
@@ -316,18 +302,16 @@ void DrawTexture(Texture texture, long diskSize, uint VRAMSize, List<TextureSpri
316302
var size = new Vector2Int(Math.RoundToInt(spriteRect.Width * scale), Math.RoundToInt(spriteRect.Height * scale));
317303
var rect = new Rect(position, size);
318304

319-
ImGui.GetWindowDrawList().AddRect(new Vector2(rect.Min.X, rect.Min.Y),
320-
new Vector2(rect.Max.X, rect.Max.Y), ImGuiProxy.ImGuiRGBA(255, 255, 255, 255));
305+
EditorGUI.AddRectangle(rect, Color32.White);
321306

322307
if (isOriginal)
323308
{
324309
void CenteredText(string text)
325310
{
326-
Vector2 textSize = ImGui.CalcTextSize(text);
311+
Vector2 textSize = EditorGUI.GetTextSize(text);
327312

328-
ImGui.GetWindowDrawList().AddText(new Vector2(rect.Min.X + (rect.Width - textSize.X) / 2,
329-
rect.Min.Y + (rect.Height - textSize.Y) / 2),
330-
ImGuiProxy.ImGuiRGBA(255, 255, 255, 255), text);
313+
EditorGUI.AddText(text, new Vector2(rect.Min.X + (rect.Width - textSize.X) / 2,
314+
rect.Min.Y + (rect.Height - textSize.Y) / 2), Color32.White);
331315
}
332316

333317
switch (sprite.rotation)
@@ -371,24 +355,22 @@ void CenteredText(string text)
371355
if (previewTexture != null && previewTexture.Disposed == false &&
372356
originalTexture != null && originalTexture.Disposed == false)
373357
{
374-
if (ImGui.BeginTabBar("##TextureAssetPreviewTexture"))
358+
EditorGUI.TabBar(["Preview", "Processed"], (tabIndex) =>
375359
{
376-
if (ImGui.BeginTabItem("Preview"))
360+
switch(tabIndex)
377361
{
378-
DrawTexture(originalTexture, originalDiskSize, originalVRAMSize, previewTexture.metadata.sprites, true);
362+
case 0:
363+
DrawTexture(originalTexture, originalDiskSize, originalVRAMSize, previewTexture.metadata.sprites, true);
379364

380-
ImGui.EndTabItem();
381-
}
365+
break;
382366

383-
if (ImGui.BeginTabItem("Processed"))
384-
{
385-
DrawTexture(previewTexture, diskSize, VRAMSize, previewTexture.metadata.sprites, false);
367+
case 1:
386368

387-
ImGui.EndTabItem();
388-
}
369+
DrawTexture(previewTexture, diskSize, VRAMSize, previewTexture.metadata.sprites, false);
389370

390-
ImGui.EndTabBar();
391-
}
371+
break;
372+
}
373+
});
392374
}
393375
else if (previewTexture != null)
394376
{

Engine/Editor/Editors/Assets/TileMapAssetEditor.cs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using ImGuiNET;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using System.Reflection;
43

54
namespace Staple.Editor;
@@ -18,23 +17,22 @@ public override bool RenderField(FieldInfo field)
1817
tilesets.Add(null);
1918
}
2019

21-
ImGui.BeginGroup();
22-
23-
for (var i = 0; i < tilesets.Count; i++)
20+
EditorGUI.Group(() =>
2421
{
25-
if (EditorGUI.Button("-"))
22+
for (var i = 0; i < tilesets.Count; i++)
2623
{
27-
tilesets.RemoveAt(i);
24+
if (EditorGUI.Button("-"))
25+
{
26+
tilesets.RemoveAt(i);
2827

29-
break;
30-
}
28+
break;
29+
}
3130

32-
EditorGUI.SameLine();
31+
EditorGUI.SameLine();
3332

34-
tilesets[i] = (Texture)EditorGUI.ObjectPicker(typeof(Texture), $"Texture {i}", tilesets[i]);
35-
}
36-
37-
ImGui.EndGroup();
33+
tilesets[i] = (Texture)EditorGUI.ObjectPicker(typeof(Texture), $"Texture {i}", tilesets[i]);
34+
}
35+
});
3836

3937
return true;
4038
}

Engine/Editor/Editors/Default/SpriteRendererEditor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public override bool RenderField(FieldInfo field)
4242

4343
EditorGUI.SameLine();
4444

45-
if (EditorGUI.Button("O##SpritePicker"))
45+
if (EditorGUI.Button("O"))
4646
{
4747
var editor = StapleEditor.instance;
4848
var assetPath = AssetSerialization.GetAssetPathFromCache(AssetDatabase.GetAssetPath(value.Guid));

0 commit comments

Comments
 (0)