@@ -21,13 +21,13 @@ public sealed class UIManager : GameFrameworkModule,IUpdate
21
21
//资源管理器
22
22
private GameFramework . Taurus . ResourceManager _resource ;
23
23
//ui堆栈
24
- private Stack < UIViewAttribute > _stackUiAsset = new Stack < UIViewAttribute > ( ) ;
24
+ private Stack < AssetConfig > _stackUiAsset = new Stack < AssetConfig > ( ) ;
25
25
//所有的uiview
26
- private readonly Dictionary < UIViewAttribute , UIView > _allUiViews = new Dictionary < UIViewAttribute , UIView > ( ) ;
26
+ private readonly Dictionary < AssetConfig , UIView > _allUiViews = new Dictionary < AssetConfig , UIView > ( ) ;
27
27
//默认的uipath路径
28
- private readonly Dictionary < int , UIViewAttribute > _uiAssetPath = new Dictionary < int , UIViewAttribute > ( ) ;
28
+ private readonly Dictionary < int , AssetConfig > _uiAssetPath = new Dictionary < int , AssetConfig > ( ) ;
29
29
//所有的uiAsset
30
- private readonly Dictionary < int , UIViewAttribute > _allUiAssets = new Dictionary < int , UIViewAttribute > ( ) ;
30
+ private readonly Dictionary < int , AssetConfig > _allUiAssets = new Dictionary < int , AssetConfig > ( ) ;
31
31
#region 构造函数
32
32
public UIManager ( )
33
33
{
@@ -39,17 +39,17 @@ public UIManager()
39
39
#region 外部接口
40
40
public void Push < T > ( bool allowMulti = false , params object [ ] parameters ) where T : UIView
41
41
{
42
- UIViewAttribute uiViewAttribute = CheckAssetPath ( typeof ( T ) ) ;
43
- if ( uiViewAttribute == null )
42
+ AssetConfig assetConfig = CheckAssetPath ( typeof ( T ) ) ;
43
+ if ( assetConfig == null )
44
44
return ;
45
45
46
46
if ( _stackUiAsset . Count > 0 )
47
47
{
48
- UIViewAttribute lastUiViewAttribute = _stackUiAsset . Peek ( ) ;
48
+ AssetConfig lastAssetCofig = _stackUiAsset . Peek ( ) ;
49
49
//如果界面已经打开 则不在执行
50
- if ( Equals ( lastUiViewAttribute , uiViewAttribute ) && ! allowMulti )
50
+ if ( Equals ( lastAssetCofig , assetConfig ) && ! allowMulti )
51
51
return ;
52
- IUIView uiView = GetUiView < T > ( lastUiViewAttribute ) ;
52
+ IUIView uiView = GetUiView < T > ( lastAssetCofig ) ;
53
53
54
54
////触发暂停事件
55
55
//_uiPauseArgs.UIView = uiView;
@@ -58,13 +58,15 @@ public void Push<T>(bool allowMulti = false, params object[] parameters) where T
58
58
uiView . OnPause ( ) ;
59
59
}
60
60
61
- UIViewAttribute newUIViewAttribute = uiViewAttribute ;
61
+ AssetConfig newAssetConfig = null ;
62
62
if ( allowMulti )
63
- newUIViewAttribute = new UIViewAttribute ( uiViewAttribute . AssetBundleName , uiViewAttribute . ViewPath ) ;
63
+ newAssetConfig = new AssetConfig ( assetConfig . AssetBundleName , assetConfig . AssetPath ) ;
64
+ else
65
+ newAssetConfig = assetConfig ;
64
66
65
67
66
- _stackUiAsset . Push ( newUIViewAttribute ) ;
67
- UIView newUiView = GetUiView < T > ( newUIViewAttribute ) ;
68
+ _stackUiAsset . Push ( newAssetConfig ) ;
69
+ UIView newUiView = GetUiView < T > ( newAssetConfig ) ;
68
70
newUiView . OnEnter ( parameters ) ;
69
71
70
72
////触发打开事件
@@ -78,9 +80,9 @@ public void Pop(bool isDestory = false)
78
80
//移除当前UI
79
81
if ( _stackUiAsset . Count > 0 )
80
82
{
81
- UIViewAttribute lastUIViewAttribute = _stackUiAsset . Pop ( ) ;
83
+ AssetConfig lastAssetConfig = _stackUiAsset . Pop ( ) ;
82
84
UIView lastUiView ;
83
- if ( _allUiViews . TryGetValue ( lastUIViewAttribute , out lastUiView ) )
85
+ if ( _allUiViews . TryGetValue ( lastAssetConfig , out lastUiView ) )
84
86
{
85
87
////触发关闭事件
86
88
//_uiExitArgs.UIView = lastUiView;
@@ -89,7 +91,7 @@ public void Pop(bool isDestory = false)
89
91
lastUiView . OnExit ( ) ;
90
92
if ( isDestory )
91
93
{
92
- _allUiViews . Remove ( lastUIViewAttribute ) ;
94
+ _allUiViews . Remove ( lastAssetConfig ) ;
93
95
MonoBehaviour . Destroy ( lastUiView . gameObject ) ;
94
96
}
95
97
else
@@ -99,8 +101,8 @@ public void Pop(bool isDestory = false)
99
101
100
102
if ( _stackUiAsset . Count > 0 )
101
103
{
102
- UIViewAttribute uiViewAttribute = _stackUiAsset . Peek ( ) ;
103
- if ( _allUiViews . TryGetValue ( uiViewAttribute , out var lastUiView ) )
104
+ AssetConfig lastAssetConfig = _stackUiAsset . Peek ( ) ;
105
+ if ( _allUiViews . TryGetValue ( lastAssetConfig , out var lastUiView ) )
104
106
lastUiView . OnResume ( ) ;
105
107
106
108
////触发恢复事件
@@ -125,32 +127,31 @@ public void OnUpdate()
125
127
}
126
128
127
129
//检查路径
128
- private UIViewAttribute CheckAssetPath ( Type t )
130
+ private AssetConfig CheckAssetPath ( Type t )
129
131
{
130
132
int hashCode = t . GetHashCode ( ) ;
131
133
132
- UIViewAttribute uiViewAttribute = null ;
133
- if ( ! _uiAssetPath . TryGetValue ( hashCode , out uiViewAttribute ) )
134
+ if ( ! _uiAssetPath . TryGetValue ( hashCode , out var assetCofig ) )
134
135
{
135
136
object [ ] attrs = t . GetCustomAttributes ( typeof ( UIViewAttribute ) , false ) ;
136
137
if ( attrs . Length == 0 )
137
138
return null ;
138
- uiViewAttribute = ( UIViewAttribute ) attrs [ 0 ] ;
139
- if ( string . IsNullOrEmpty ( uiViewAttribute . ViewPath )
140
- || string . IsNullOrEmpty ( uiViewAttribute . AssetBundleName ) )
139
+ if ( ! ( attrs [ 0 ] is UIViewAttribute uIViewAttribute ) || string . IsNullOrEmpty ( uIViewAttribute . ViewPath )
140
+ || string . IsNullOrEmpty ( uIViewAttribute . AssetBundleName ) )
141
141
return null ;
142
+ assetCofig = new AssetConfig ( uIViewAttribute . AssetBundleName , uIViewAttribute . ViewPath ) ;
142
143
}
143
- return uiViewAttribute ;
144
+ return assetCofig ;
144
145
}
145
146
146
147
147
148
//获取ui界面
148
- private UIView GetUiView < T > ( UIViewAttribute uiViewAttribute ) where T : UIView
149
+ private UIView GetUiView < T > ( AssetConfig assetConfig ) where T : UIView
149
150
{
150
151
UIView uiView ;
151
- if ( ! _allUiViews . TryGetValue ( uiViewAttribute , out uiView ) )
152
+ if ( ! _allUiViews . TryGetValue ( assetConfig , out uiView ) )
152
153
{
153
- GameObject uiViewSource = _resource . LoadAsset < GameObject > ( uiViewAttribute . AssetBundleName , uiViewAttribute . ViewPath ) ;
154
+ GameObject uiViewSource = _resource . LoadAsset < GameObject > ( assetConfig . AssetBundleName , assetConfig . AssetPath ) ;
154
155
if ( uiViewSource == null )
155
156
return null ;
156
157
GameObject uiViewClone = GameObject . Instantiate ( uiViewSource ) ;
@@ -163,7 +164,7 @@ private UIView GetUiView<T>(UIViewAttribute uiViewAttribute) where T:UIView
163
164
if ( ci != null ) uiView = ci . Invoke ( obj ) as UIView ;
164
165
if ( uiView == null )
165
166
return null ;
166
- _allUiViews [ uiViewAttribute ] = uiView ;
167
+ _allUiViews [ assetConfig ] = uiView ;
167
168
return uiView ;
168
169
}
169
170
uiView . gameObject . SetActive ( true ) ;
@@ -187,7 +188,23 @@ public override void OnClose()
187
188
_allUiViews . Clear ( ) ;
188
189
}
189
190
#endregion
190
-
191
+
192
+
193
+ private class AssetConfig
194
+ {
195
+ public string AssetBundleName ;
196
+ public string AssetPath ;
197
+
198
+ public AssetConfig ( )
199
+ {
200
+ }
201
+
202
+ public AssetConfig ( string assetBundleName , string assetPath )
203
+ {
204
+ AssetBundleName = assetBundleName ;
205
+ AssetPath = assetPath ;
206
+ }
207
+ }
191
208
192
209
193
210
}
0 commit comments