-
Notifications
You must be signed in to change notification settings - Fork 65
Expand file tree
/
Copy pathSpriteCollectionComponent.Resource.cs
More file actions
78 lines (70 loc) · 3.54 KB
/
SpriteCollectionComponent.Resource.cs
File metadata and controls
78 lines (70 loc) · 3.54 KB
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System.Collections.Generic;
using GameFramework.Resource;
using UnityGameFramework.Runtime;
namespace UGFExtensions.SpriteCollection
{
public partial class SpriteCollectionComponent
{
/// <summary>
/// 资源组件
/// </summary>
private ResourceComponent m_ResourceComponent;
private LoadAssetCallbacks m_LoadAssetCallbacks;
private void InitializedResources()
{
m_ResourceComponent = UnityGameFramework.Runtime.GameEntry.GetComponent<ResourceComponent>();
m_LoadAssetCallbacks = new LoadAssetCallbacks(OnLoadAssetSuccess, OnLoadAssetFailure);
}
private void OnLoadAssetFailure(string assetName, LoadResourceStatus status, string errormessage, object userdata)
{
Log.Error("Can not load SpriteCollection from '{0}' with error message '{1}'.",assetName,errormessage);
}
private void OnLoadAssetSuccess(string assetName, object asset, float duration, object userdata)
{
ISetSpriteObject setSpriteObject = (ISetSpriteObject)userdata;
SpriteCollection collection = (SpriteCollection)asset;
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);
}
/// <summary>
/// 设置精灵
/// </summary>
/// <param name="setSpriteObject">需要设置精灵的对象</param>
public void SetSprite(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);
m_ResourceComponent.LoadAsset(setSpriteObject.CollectionPath,typeof(SpriteCollection),m_LoadAssetCallbacks,setSpriteObject);
}
}
}