Ejemplo n.º 1
0
        private SceneInstanceInfo NewSceneInstance(int sceneId, string scriptPath)
        {
            SceneInstanceInfo instanceInfo = GetUnusedSceneInstanceInfoFromPool(sceneId);

            if (null == instanceInfo)
            {
                ConfigManager.Instance.LoadIfNotExist(sceneId, 1, HomePath.Instance.GetAbsolutePath(scriptPath));
                IInstance instance = ConfigManager.Instance.NewInstance(sceneId, 1);
                if (null == instance)
                {
                    LogUtil.Error("SceneSystem::NewSceneInstance scene script {0} not found!", sceneId);
                }
                instance.SenderId = 0;
                instance.Target   = Contexts.sharedInstance.game.sceneEntity;

                SceneInstanceInfo sii = new SceneInstanceInfo();
                sii.m_SceneId       = sceneId;
                sii.m_SceneInstance = instance;
                sii.m_IsUsed        = true;

                AddStoryInstanceInfoToPool(sceneId, sii);
                return(sii);
            }
            else
            {
                instanceInfo.m_IsUsed = true;
                return(instanceInfo);
            }
        }
Ejemplo n.º 2
0
        public static SceneInstance GetAsSceneInstance(Scene scene)
        {
            var info = new SceneInstanceInfo {
                Scene = scene, AsyncOperation = null
            };
            var converter = new SceneInstanceConverter {
                SceneInstanceInfo = info
            };

            return(converter.SceneInstance);
        }
Ejemplo n.º 3
0
        private void AddStoryInstanceInfoToPool(int sceneId, SceneInstanceInfo info)
        {
            List <SceneInstanceInfo> infos;

            if (m_SceneInstancePool.TryGetValue(sceneId, out infos))
            {
                infos.Add(info);
            }
            else
            {
                infos = new List <SceneInstanceInfo>();
                infos.Add(info);
                m_SceneInstancePool.Add(sceneId, infos);
            }
        }
Ejemplo n.º 4
0
        private SceneInstanceInfo GetUnusedSceneInstanceInfoFromPool(int sceneId)
        {
            SceneInstanceInfo        info = null;
            List <SceneInstanceInfo> infos;

            if (m_SceneInstancePool.TryGetValue(sceneId, out infos))
            {
                foreach (var sceneInfo in infos)
                {
                    if (!sceneInfo.m_IsUsed)
                    {
                        info = sceneInfo;
                        break;
                    }
                }
            }
            return(info);
        }
Ejemplo n.º 5
0
 private void RecycleSceneInstance(SceneInstanceInfo info)
 {
     info.m_SceneInstance.Reset();
     info.m_IsUsed = false;
 }