Example #1
0
        internal void PreloadStoryInstance(int storyId)
        {
            ScriptInstanceInfo info = NewStoryInstance(storyId, false);

            if (null != info)
            {
                RecycleStorylInstance(info);
            }
        }
Example #2
0
        internal void SendMessage(string msgId, params object[] args)
        {
            int ct = m_StoryLogicInfos.Count;

            for (int ix = ct - 1; ix >= 0; --ix)
            {
                ScriptInstanceInfo info = m_StoryLogicInfos[ix];
                info.m_StoryInstance.SendMessage(msgId, args);
            }
        }
Example #3
0
        internal void StartStory(int storyId)
        {
            ScriptInstanceInfo inst = NewStoryInstance(storyId);

            if (null != inst)
            {
                m_StoryLogicInfos.Add(inst);
                inst.m_StoryInstance.Context = WorldSystem.Instance;
                inst.m_StoryInstance.Start();

                LogSystem.Info("StartStory {0}", storyId);
            }
        }
Example #4
0
        internal void StopStory(int storyId)
        {
            int count = m_StoryLogicInfos.Count;

            for (int index = count - 1; index >= 0; --index)
            {
                ScriptInstanceInfo info = m_StoryLogicInfos[index];
                if (info.m_StoryId == storyId)
                {
                    RecycleStorylInstance(info);
                    m_StoryLogicInfos.RemoveAt(index);
                }
            }
        }
Example #5
0
        private ScriptInstanceInfo NewStoryInstance(int storyId, bool logIfNotFound)
        {
            ScriptInstanceInfo instInfo = GetUnusedStoryInstanceInfoFromPool(storyId);

            if (null == instInfo)
            {
                Data_SceneConfig cfg = SceneConfigProvider.Instance.GetSceneConfigById(WorldSystem.Instance.GetCurSceneId());
                if (null != cfg)
                {
                    int      ct       = cfg.m_StoryDslFile.Count;
                    string[] filePath = new string[ct];
                    for (int i = 0; i < ct; i++)
                    {
                        filePath[i] = HomePath.GetAbsolutePath(FilePathDefine_Client.C_RootPath + cfg.m_StoryDslFile[i]);
                        filePath[i] = filePath[i].Replace('\\', '/');
                    }
                    StoryConfigManager.Instance.LoadStoryIfNotExist(storyId, 0, filePath);
                    StoryInstance inst = StoryConfigManager.Instance.NewStoryInstance(storyId, 0);

                    if (inst == null)
                    {
                        if (logIfNotFound)
                        {
                            LogSystem.Error("Can't load story config, story:{0} scene:{1} !", storyId, WorldSystem.Instance.GetCurSceneId());
                        }
                        return(null);
                    }
                    ScriptInstanceInfo res = new ScriptInstanceInfo();
                    res.m_StoryId       = storyId;
                    res.m_StoryInstance = inst;
                    res.m_IsUsed        = true;

                    AddStoryInstanceInfoToPool(storyId, res);
                    return(res);
                }
                else
                {
                    if (logIfNotFound)
                    {
                        LogSystem.Error("Can't find story config, story:{0} scene:{1} !", storyId, WorldSystem.Instance.GetCurSceneId());
                    }
                    return(null);
                }
            }
            else
            {
                instInfo.m_IsUsed = true;
                return(instInfo);
            }
        }
Example #6
0
        private void AddStoryInstanceInfoToPool(int storyId, ScriptInstanceInfo info)
        {
            List <ScriptInstanceInfo> infos;

            if (m_StoryInstancePool.TryGetValue(storyId, out infos))
            {
                infos.Add(info);
            }
            else
            {
                infos = new List <ScriptInstanceInfo>();
                infos.Add(info);
                m_StoryInstancePool.Add(storyId, infos);
            }
        }
Example #7
0
        internal void Reset()
        {
            int count = m_StoryLogicInfos.Count;

            for (int index = count - 1; index >= 0; --index)
            {
                ScriptInstanceInfo info = m_StoryLogicInfos[index];
                if (null != info)
                {
                    RecycleStorylInstance(info);
                    m_StoryLogicInfos.RemoveAt(index);
                }
            }
            m_StoryLogicInfos.Clear();
        }
Example #8
0
        internal void Tick()
        {
            long time = TimeUtility.GetLocalMilliseconds();
            int  ct   = m_StoryLogicInfos.Count;

            for (int ix = ct - 1; ix >= 0; --ix)
            {
                ScriptInstanceInfo info = m_StoryLogicInfos[ix];
                info.m_StoryInstance.Tick(time);
                if (info.m_StoryInstance.IsTerminated)
                {
                    RecycleStorylInstance(info);
                    m_StoryLogicInfos.RemoveAt(ix);
                }
            }
        }
Example #9
0
        private ScriptInstanceInfo GetUnusedStoryInstanceInfoFromPool(int storyId)
        {
            ScriptInstanceInfo        info = null;
            List <ScriptInstanceInfo> infos;

            if (m_StoryInstancePool.TryGetValue(storyId, out infos))
            {
                int ct = infos.Count;
                for (int ix = 0; ix < ct; ++ix)
                {
                    if (!infos[ix].m_IsUsed)
                    {
                        info = infos[ix];
                        break;
                    }
                }
            }
            return(info);
        }
Example #10
0
 private void RecycleStorylInstance(ScriptInstanceInfo info)
 {
     info.m_IsUsed = false;
 }