-
Notifications
You must be signed in to change notification settings - Fork 66
/
Copy pathSpriteCollectionComponent.ResourceAwait.cs
57 lines (50 loc) · 2.51 KB
/
SpriteCollectionComponent.ResourceAwait.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System.Collections.Generic;
using UGFExtensions.Await;
namespace UGFExtensions.SpriteCollection
{
public partial class SpriteCollectionComponent
{
/// <summary>
/// 设置精灵
/// </summary>
/// <param name="setSpriteObject">需要设置精灵的对象</param>
public async void SetSpriteAsync(ISetSpriteObject setSpriteObject)
{
if (m_SpriteCollectionPool.CanSpawn(setSpriteObject.CollectionPath))
{
SpriteCollection collectionItem = (SpriteCollection)m_SpriteCollectionPool.Spawn(setSpriteObject.CollectionPath).Target;
setSpriteObject.SetSprite(collectionItem.GetSprite(setSpriteObject.SpritePath));
m_LoadSpriteObjectsLinkedList.AddLast(new LoadSpriteObject(setSpriteObject, collectionItem));
return;
}
if (m_WaitSetObjects.TryGetValue(setSpriteObject.CollectionPath, out var setSpriteObjects))
{
setSpriteObjects.AddLast(setSpriteObject);
}
else
{
var loadSp = new LinkedList<ISetSpriteObject>();
loadSp.AddFirst(setSpriteObject);
m_WaitSetObjects.Add(setSpriteObject.CollectionPath, loadSp);
}
if (m_SpriteCollectionBeingLoaded.Contains(setSpriteObject.CollectionPath))
{
return;
}
m_SpriteCollectionBeingLoaded.Add(setSpriteObject.CollectionPath);
SpriteCollection collection = await m_ResourceComponent.LoadAssetAsync<SpriteCollection>(setSpriteObject.CollectionPath);
m_SpriteCollectionPool.Register(SpriteCollectionItemObject.Create(setSpriteObject.CollectionPath, collection,m_ResourceComponent), false);
m_SpriteCollectionBeingLoaded.Remove(setSpriteObject.CollectionPath);
if (!m_WaitSetObjects.TryGetValue(setSpriteObject.CollectionPath, out LinkedList<ISetSpriteObject> awaitSetImages)) return;
LinkedListNode<ISetSpriteObject> current = awaitSetImages?.First;
while (current != null)
{
m_SpriteCollectionPool.Spawn(setSpriteObject.CollectionPath);
current.Value.SetSprite(collection.GetSprite(current.Value.SpritePath));
m_LoadSpriteObjectsLinkedList.AddLast(new LoadSpriteObject(current.Value, collection));
current = current.Next;
}
m_WaitSetObjects.Remove(setSpriteObject.CollectionPath);
}
}
}