//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // PUBLIC FUNCTION //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // @Brief : Request screen // @Param : eScreenType => Screen type // : pParam => Initialization parameters public void RequestScreen(eSCREEN_TYPE eScreenType, KrUIArgumentParameter pParam) { KrDebug.Assert(s_pSCREEN_PATH_DIC.ContainsKey(eScreenType), "The path of the corresponding dialog is not set. eScreenType = " + eScreenType.ToString(), typeof(KrUIManager)); KrScreen pScreen = Create <KrScreen>(s_pSCREEN_PATH_DIC[eScreenType], screenBase); pScreen.Initialize(pParam); // Cache screen data CacheScreen(eScreenType, pParam); }
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // PRIVATE FUNCTION //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // @Brief : Cache screen data // @Param : eScreenType => Screen type // : pParam => Initialization parameters private void CacheScreen(eSCREEN_TYPE eScreenType, KrUIArgumentParameter pParam) { // Do not cache if the same screen as the current screen if (m_pScreenCaches.Count > 0) { if (m_pScreenCaches[0].IsSameType(eScreenType)) { return; } } KrScreenCache pCache = new KrScreenCache(eScreenType, pParam); m_pScreenCaches.Add(pCache); // When the number of screens that can be cached is exceeded, the cache is deleted from the old one if (m_pScreenCaches.Count > cacheScreenNum) { m_pScreenCaches.RemoveAt(cacheScreenNum); } }