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))); }
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); } }
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(); }
/// <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)); } }
/// <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(); }
public CoroutineHandle CustomStartBattleCoroutine() { if (CurData == null) { return(BattleCoroutine.Run(CustomStartBattleFlow())); } return(BattleCoroutine.Run(CurData.CustomStartBattleFlow())); }
/// <summary> /// 移除行为树 /// </summary> protected override void RemoveBT() { if (CurData != null) { CurData.OnBeRemoved(); } CurData = null; }
/// <summary> /// 是否在选项界面中 /// </summary> /// <returns></returns> public bool IsInOption() { if (CurData.IsHaveOption() && CurTalkFragment().IsLasted) { return(true); } return(false); }
public void Get() { CurData.Add((byte)DataBaseCommand.Serialize); if (RealTimeCommit) { Commit(); } }
/// <summary> /// 移除 /// </summary> protected virtual void Remove() { if (CurData != null) { CurData.OnBeRemoved(); } CurData = null; }
// 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(); } } } }
/// <summary> /// 停止一段剧情 /// </summary> public virtual void Stop() { if (CurData == null) { return; } CurData.OnBeRemoved(); CurData = null; }
// отправка изменений 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); }
/// <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); }
public override void OnFixedUpdate() { base.OnFixedUpdate(); if (!IsActiveAI) { return; } if (CurData != null) { CurData.OnUpdate(); } }
public override void ManualUpdate() { base.ManualUpdate(); if (!IsActiveAI) { return; } if (CurData != null) { CurData.OnUpdate(); } }
/// <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)); } }
/// <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); } }
// 加载战场 // 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; }
// 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(); } }
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(); } } }
/// <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); } }
/// <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)); } }
// 加载场景 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); } }
/// <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); } }
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(); } } }
/// <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()); }
// 卸载战场 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(); }
// 卸载战场 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(); }
public void TransactCommit() { CurData.Add((Byte)DataBaseCommand.TransactCommited); Commit(); }