예제 #1
0
 void AddInteger(int number)
 {
     CurData.Add((byte)((number & 0xFF000000) >> 24));
     CurData.Add((byte)((number & 0x00FF0000) >> 16));
     CurData.Add((byte)((number & 0x0000FF00) >> 8));
     CurData.Add((byte)((number & 0x000000FF)));
 }
예제 #2
0
        public virtual void Load(string battleID = "")
        {
            if (IsInBattle)
            {
                CLog.Error("正处于SubBattle中");
                return;
            }
            TDBaseBattleData tempData = TDLuaMgr.Get <TData>(battleID);

            if (tempData == null)
            {
                CLog.Error("没有这个战场:{0}", battleID);
                return;
            }
            SubBattleCoroutine.Kill();
            CurData = tempData.Copy <TData>();
            if (CurData != null)
            {
                BattleID = tempData.TDID;
                CurData.OnBeAdded(SelfBaseGlobal);
                BattleCoroutine.Run(_LoadBattle());
            }
            else
            {
                CLog.Error("Battle not found !error id=" + battleID);
            }
        }
예제 #3
0
        public void Load(string FileName)
        {
            XmlSerializer Serializer = new XmlSerializer(typeof(List <Book>));
            StreamReader  Reader     = new StreamReader(FileName);

            if (!IsUpdating)
            {
                CurData.Add((byte)DataBaseCommand.Load);
                byte[] buffer = new byte[Reader.BaseStream.Length];
                Reader.BaseStream.Read(buffer, 0, (int)Reader.BaseStream.Length);
                CurData.AddRange(buffer);
                if (RealTimeCommit)
                {
                    Commit();
                }
            }

            base.Clear();
            List <Book> Books = (List <Book>)Serializer.Deserialize(Reader);

            foreach (Book B in Books)
            {
                base.Add(B);
            }
            Reader.Close();
        }
예제 #4
0
        /// <summary>
        /// Gets the current data of the specified channels.
        /// </summary>
        public Dto <CurData> GetCurDataStep1(IdList cnlNums, bool useCache)
        {
            try
            {
                // request data
                CheckAccessRights(cnlNums);
                CurData curData = RequestCurData(cnlNums, 0, useCache);

                // write channel list to the cache
                if (useCache && curData.CnlListID != "0")
                {
                    memoryCache.Set(
                        PluginUtils.GetCacheKey("CnlList", curData.CnlListID),
                        cnlNums,
                        new MemoryCacheEntryOptions {
                        SlidingExpiration = WebUtils.CacheExpiration
                    });
                }

                return(Dto <CurData> .Success(curData));
            }
            catch (AccessDeniedException ex)
            {
                return(Dto <CurData> .Fail(ex.Message));
            }
            catch (Exception ex)
            {
                webContext.Log.WriteError(ex.BuildErrorMessage(WebPhrases.ErrorInWebApi, nameof(GetCurDataStep1)));
                return(Dto <CurData> .Fail(ex.Message));
            }
        }
예제 #5
0
        /// <summary>
        /// 卸载战场
        /// </summary>
        /// <param name="onDone"></param>
        /// <returns></returns>
        IEnumerator <float> _UnLoadBattle(Callback onDone)
        {
            //暂停一段时间
            SelfBaseGlobal.PauseGame(true);
            yield return(Timing.WaitForSeconds(0.1f));

            Callback_OnBattleUnLoad?.Invoke();
            yield return(Timing.WaitForSeconds(1.0f));

            string sceneName = CurData.GetSceneName();
            var    wait      = SceneManager.UnloadSceneAsync(sceneName);

            while (!wait.isDone)
            {
                yield return(Timing.WaitForOneFrame);

                Callback_OnLoadingProgressChanged?.Invoke("UnloadScene", wait.progress);
            }

            //卸载未使用的资源
            SelfBaseGlobal.DLCMgr.UnloadAsset(SceneAsset);
            SelfBaseGlobal.DLCMgr.UnLoadBattleAssetBundle();
            CurData.OnBeRemoved();
            CurData = null;

            Callback_OnLoadingProgressChanged?.Invoke("GC", 1.0f);
            BaseGlobalMonoMgr.RemoveAllNull();
            GC.Collect();
            yield return(Timing.WaitForSeconds(0.1f));

            Callback_OnBattleUnLoaded?.Invoke();
            SelfBaseGlobal.ResumeGame();
            onDone?.Invoke();
        }
예제 #6
0
 public CoroutineHandle CustomStartBattleCoroutine()
 {
     if (CurData == null)
     {
         return(BattleCoroutine.Run(CustomStartBattleFlow()));
     }
     return(BattleCoroutine.Run(CurData.CustomStartBattleFlow()));
 }
예제 #7
0
 /// <summary>
 /// 移除行为树
 /// </summary>
 protected override void RemoveBT()
 {
     if (CurData != null)
     {
         CurData.OnBeRemoved();
     }
     CurData = null;
 }
예제 #8
0
 /// <summary>
 /// 是否在选项界面中
 /// </summary>
 /// <returns></returns>
 public bool IsInOption()
 {
     if (CurData.IsHaveOption() && CurTalkFragment().IsLasted)
     {
         return(true);
     }
     return(false);
 }
예제 #9
0
 public void Get()
 {
     CurData.Add((byte)DataBaseCommand.Serialize);
     if (RealTimeCommit)
     {
         Commit();
     }
 }
예제 #10
0
 /// <summary>
 /// 移除
 /// </summary>
 protected virtual void Remove()
 {
     if (CurData != null)
     {
         CurData.OnBeRemoved();
     }
     CurData = null;
 }
예제 #11
0
        // Write methods. Commit is required
        new public Book this[int index]
        {
            get
            {
                return(base[index]);
            }
            set
            {
                if (IsUpdating)
                {
                    if (Invoke != null)
                    {
                        //Invoke((Action)delegate { base.SetItem(index, value); });
                        // надо что-то с этим делать
                        Invoke((Action) delegate { base.RemoveAt(index); });
                        Invoke((Action) delegate { base.Insert(index, value); });
                    }
                    else
                    {
                        this[index] = value;
                    }
                }
                else
                {
                    CurData.Add((byte)DataBaseCommand.Change);
                    AddInteger(index);
                    CurData.AddRange(Encoding.UTF8.GetBytes(value.ToString()));

                    if (TransactionRequest)
                    {
                        Argums = new Queue();
                        Argums.Enqueue(DataBaseCommand.Change);
                        Argums.Enqueue(index);
                        Argums.Enqueue(value);
                    }
                    else
                    {
                        if (Invoke != null)
                        {
                            //Invoke((Action)delegate { base.SetItem(index, value); });
                            // надо что-то с этим делать
                            Invoke((Action) delegate { base.RemoveAt(index); });
                            Invoke((Action) delegate { base.Insert(index, value); });
                        }
                        else
                        {
                            this[index] = value;
                        }
                    }

                    if (RealTimeCommit)
                    {
                        Commit();
                    }
                }
            }
        }
예제 #12
0
 /// <summary>
 /// 停止一段剧情
 /// </summary>
 public virtual void Stop()
 {
     if (CurData == null)
     {
         return;
     }
     CurData.OnBeRemoved();
     CurData = null;
 }
예제 #13
0
        // отправка изменений
        public void Commit()
        {
            CurData.Insert(0, 0);
            CurData.InsertRange(0, GetBytes(CurData.Count));
            byte[] Result = CurData.ToArray();
            CurData.Clear();

            //NetworkUnit.Send(Result);
            ByteSender(0, Result);
        }
예제 #14
0
 /// <summary>
 /// 选择选项
 /// </summary>
 /// <returns></returns>
 public virtual string SelectOption(int index)
 {
     if (!IsInOption())
     {
         return(BaseConstMgr.STR_Inv);
     }
     CurSelectOptionIndex = Mathf.Clamp(index, 0, CurData.Option.Count - 1);
     CurSelectOption      = CurData.GetOption(CurSelectOptionIndex);
     Callback_OnSelect?.Invoke(CurData, CurSelectOption, CurSelectOptionIndex);
     return(CurSelectOption);
 }
예제 #15
0
 public override void OnFixedUpdate()
 {
     base.OnFixedUpdate();
     if (!IsActiveAI)
     {
         return;
     }
     if (CurData != null)
     {
         CurData.OnUpdate();
     }
 }
예제 #16
0
 public override void ManualUpdate()
 {
     base.ManualUpdate();
     if (!IsActiveAI)
     {
         return;
     }
     if (CurData != null)
     {
         CurData.OnUpdate();
     }
 }
예제 #17
0
 /// <summary>
 /// Gets the current data by the channel list ID returned in step 1.
 /// </summary>
 public Dto <CurData> GetCurDataStep2(long cnlListID)
 {
     try
     {
         IdList  cnlNums = memoryCache.Get <IdList>(PluginUtils.GetCacheKey("CnlList", cnlListID));
         CurData curData = RequestCurData(cnlNums, cnlListID, true);
         return(Dto <CurData> .Success(curData));
     }
     catch (Exception ex)
     {
         webContext.Log.WriteError(ex.BuildErrorMessage(WebPhrases.ErrorInWebApi, nameof(GetCurDataStep2)));
         return(Dto <CurData> .Fail(ex.Message));
     }
 }
예제 #18
0
 /// <summary>
 /// 加载战斗场景
 /// </summary>
 protected void LoadBattle(TDBaseBattleData data, bool readData = true)
 {
     GC.Collect();
     MainUICoroutine.Kill();
     CurData = data.Copy() as TData;
     if (CurData != null)
     {
         CurData.OnBeAdded(SelfBaseGlobal);
         BattleCoroutine.Run(_LoadBattle(readData));
     }
     else
     {
         CLog.Error("Battle not found !error id=" + data.TDID);
     }
 }
예제 #19
0
        // 加载战场
        // readData:是否读取数据
        IEnumerator <float> _LoadBattle()
        {
            yield return(Timing.WaitForOneFrame);

            Callback_OnBattleLoadStart?.Invoke();
            float startTime = Time.realtimeSinceStartup;

            IsLoadingBattle = true;
            IsLoadBattleEnd = false;
            IsGameStart     = false;
            //开始Tip
            SubBattleCoroutine.Run(_RandTip());
            //开始加载
            Callback_OnBattleLoad?.Invoke();
            yield return(Timing.WaitForOneFrame);

            OnLoadSceneStart();
            Callback_OnLoadingProgressChanged?.Invoke("Start to load", 0.0f);
            //演示几秒,给UI渐变的时间
            yield return(Timing.WaitForSeconds(DelayLoadSceneTime));

            //加载场景
            SceneName  = CurData.GetRawSceneName();
            SceneAsset = GRMgr.LoadScene(SceneName);
            while (!SceneAsset.IsDone)
            {
                yield return(Timing.WaitForOneFrame);

                Callback_OnLoadingProgressChanged?.Invoke("LoadingScene", SceneAsset.Progress * 0.8f);
            }
            //延时一帧
            yield return(Timing.WaitForOneFrame);

            SceneManager.SetActiveScene(SceneManager.GetSceneByName(SceneName));
            Callback_OnBattleLoadedScene?.Invoke();
            //这里必须延迟一帧,等待UI创建,注册事件
            yield return(Timing.WaitForOneFrame);

            GC.Collect();
            Callback_OnLoadingProgressChanged?.Invoke("GC", 1.0f);
            IsLoadingBattle = false;
            //场景加载结束
            Callback_OnBattleLoaded?.Invoke();
            IsLoadBattleEnd = true;
            Callback_OnGameStart?.Invoke();
            IsGameStart = true;
        }
예제 #20
0
        // server save to stream
        public void Serialize()
        {
            XmlSerializer Serializer = new XmlSerializer(typeof(List <Book>));

            byte[]       ar     = new byte[8192];
            MemoryStream Stream = new MemoryStream(ar);

            Serializer.Serialize(Stream, base.Items);
            Array.Resize(ref ar, (int)Stream.Position);
            Stream.Close();
            CurData.Add((byte)DataBaseCommand.Load);
            CurData.AddRange(ar);
            if (RealTimeCommit)
            {
                Commit();
            }
        }
예제 #21
0
        public void Insert(int index, Book item)
        {
            if (IsUpdating)
            {
                if (Invoke != null)
                {
                    Invoke((Action) delegate { base.Insert(index, item); });
                }
                else
                {
                    base.Insert(index, item);
                }
            }
            else
            {
                CurData.Add((byte)DataBaseCommand.Add);
                AddInteger(index);
                CurData.AddRange(Encoding.Unicode.GetBytes(item.ToString()));


                if (TransactionRequest)
                {
                    Argums = new Queue();
                    Argums.Enqueue(DataBaseCommand.Add);
                    Argums.Enqueue(index);
                    Argums.Enqueue(item);
                }
                else
                {
                    if (Invoke != null)
                    {
                        Invoke((Action) delegate { base.Insert(index, item); });
                    }
                    else
                    {
                        base.Insert(index, item);
                    }
                }

                if (RealTimeCommit)
                {
                    Commit();
                }
            }
        }
예제 #22
0
        /// <summary>
        /// 改变行为树
        /// </summary>
        public virtual void Change(string smKey)
        {
            if (smKey.IsInv())
            {
                return;
            }
            Remove();
            TData tempData = TDLuaMgr.Get <TData>(smKey);

            if (tempData != null)
            {
                CurData = tempData.Copy <TData>();
                CurData.OnBeAdded(SelfBaseUnit);
            }
            else
            {
                CLog.Error("错误,没有这个类型的AI:{0}", smKey);
            }
        }
예제 #23
0
        /// <summary>
        /// Gets the current data by view.
        /// </summary>
        /// <remarks>Loads the specified view if it is not in the cache.</remarks>
        public Dto <CurData> GetCurDataByView(int viewID, long cnlListID)
        {
            try
            {
                if (viewLoader.GetView(viewID, out ViewBase view, out string errMsg))
                {
                    CurData curData = memoryCache.GetOrCreate(PluginUtils.GetCacheKey("CurData", viewID), entry =>
                    {
                        entry.SetAbsoluteExpiration(DataCacheExpiration);
                        return(RequestCurData(view.CnlNumList, cnlListID, true));
                    });

                    return(Dto <CurData> .Success(curData));
                }
                else
                {
                    return(Dto <CurData> .Fail(errMsg));
                }
            }
예제 #24
0
 // 加载场景
 protected void LoadScene(TDBaseBattleData data, bool readData = true)
 {
     if (data == null)
     {
         return;
     }
     MainUICoroutine.Kill();
     CurData = data.Copy <TData>();
     if (CurData != null)
     {
         BattleID = data.TDID;
         CurData.OnBeAdded(SelfBaseGlobal);
         BattleCoroutine.Run(_loadBattle(readData));
     }
     else
     {
         CLog.Error("Battle not found !error id=" + data.TDID);
     }
 }
예제 #25
0
        /// <summary>
        /// 改变行为树
        /// </summary>
        public override void ChangeBT(string btKey)
        {
            if (btKey.IsInvStr())
            {
                return;
            }
            RemoveBT();
            TData tempData = Table.Find(btKey);

            if (tempData != null)
            {
                CurData = tempData.Copy() as TData;
                CurData.OnBeAdded(SelfBaseUnit);
            }
            else
            {
                CLog.Error("错误,没有这个类型的BT:{0}", btKey);
            }
        }
예제 #26
0
        new public void RemoveAt(int index)
        {
            if (IsUpdating)
            {
                if (Invoke != null)
                {
                    Invoke((Action) delegate { base.RemoveAt(index); });
                }
                else
                {
                    base.RemoveAt(index);
                }
            }
            else
            {
                CurData.Add((byte)DataBaseCommand.RemoveAt);
                AddInteger(index);
                if (TransactionRequest)
                {
                    Argums = new Queue();
                    Argums.Enqueue(DataBaseCommand.RemoveAt);
                    Argums.Enqueue(index);
                }
                else
                {
                    if (Invoke != null)
                    {
                        Invoke((Action) delegate { base.RemoveAt(index); });
                    }
                    else
                    {
                        base.RemoveAt(index);
                    }
                }

                if (RealTimeCommit)
                {
                    Commit();
                }
            }
        }
예제 #27
0
        /// <summary>
        /// 开始一段剧情
        /// </summary>
        public virtual void Start(string id)
        {
            if (id.IsInvStr())
            {
                return;
            }
            var temp = Table.Find(id);

            if (temp == null)
            {
                CLog.Error("无法找到剧情:{0}", id);
                return;
            }
            else
            {
                CurData = temp.Copy() as TData;
            }
            CurPlotIndex = 0;
            CurData.OnBeAdded(SelfBaseGlobal);
            BattleCoroutine.Run(CurData.OnPlotStart());
        }
예제 #28
0
        // 卸载战场
        IEnumerator <float> _UnLoadBattle(Callback onDone)
        {
            if (CurData == null)
            {
                yield break;
            }
            IsLoadingBattle = false;
            IsLoadBattleEnd = false;
            IsGameStart     = false;
            CurData.OnBeRemoved();
            CurData = null;
            yield return(Timing.WaitForOneFrame);

            Callback_OnBattleUnLoad?.Invoke();
            yield return(Timing.WaitForOneFrame);

            Callback_OnLoadingProgressChanged?.Invoke("Start to load", 0.01f);
            //延时一秒.防止UI卡住
            yield return(Timing.WaitForSeconds(0.3f));

            var wait = SceneManager.UnloadSceneAsync(SceneName);

            while (!wait.isDone)
            {
                yield return(Timing.WaitForOneFrame);

                Callback_OnLoadingProgressChanged?.Invoke("UnloadScene", wait.progress);
            }

            //卸载未使用的资源
            GRMgr.UnloadScene(SceneAsset);

            Callback_OnLoadingProgressChanged?.Invoke("GC", 1.0f);
            BaseGlobal.ResumeGame();
            yield return(Timing.WaitForOneFrame);

            Callback_OnBattleUnLoaded?.Invoke();
            onDone?.Invoke();
        }
예제 #29
0
        // 卸载战场
        IEnumerator <float> _unLoadBattle(Callback onDone)
        {
            IsLoadedScene        = false;
            IsLoadingBattle      = false;
            IsLoadBattleEnd      = false;
            IsGameStartOver      = false;
            IsInPauseLoadingView = false;
            CurData.OnBeRemoved();
            CurData = null;
            //暂停一段时间
            BaseGlobal.PauseGame(true);
            BaseInputMgr.ResetFullScreenState();
            Callback_OnBattleUnLoad?.Invoke();
            yield return(Timing.WaitForOneFrame);

            Callback_OnLoadingProgressChanged?.Invoke("Start to load", 0.01f);
            //延时一秒.防止UI卡住
            yield return(Timing.WaitForSeconds(0.5f));

            var wait = SceneManager.UnloadSceneAsync(SceneName);

            while (!wait.isDone)
            {
                yield return(Timing.WaitForOneFrame);

                Callback_OnLoadingProgressChanged?.Invoke("UnloadScene", wait.progress);
            }

            //卸载未使用的资源
            GRMgr.UnloadScene(SceneAsset);

            Callback_OnLoadingProgressChanged?.Invoke("GC", 1.0f);
            yield return(Timing.WaitForOneFrame);

            Callback_OnBattleUnLoaded?.Invoke();
            BaseGlobal.ResumeGame();
            onDone?.Invoke();
        }
예제 #30
0
 public void TransactCommit()
 {
     CurData.Add((Byte)DataBaseCommand.TransactCommited);
     Commit();
 }