| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 | using System;using System.Collections.Generic;using Excel2Json;using Fort23.Core;using Fort23.UTool;using UnityEngine.Device;namespace Fort23.Mono{    public delegate CTask CustomAction(UnityEngine.Object o);        public abstract class IGuideLogic    {        // /// <summary>        // /// 是否是软性引导(还需要等待一些特殊的条件才触发的引导)        // /// </summary>        // public virtual bool issoftGuide => false;        /// <summary>        /// 引导ID        /// </summary>        public int guideID;        public int guideIdx = 0;        protected List<CustomAction> actionList = new List<CustomAction>();        protected int step;        public UnlockConfig uLockConfig;        public object ActionObject;        public PlayerGuideManager pgm;        // public IGuideLogic(PlayerGuideManager guideManager)        // {        //     this.pgm = guideManager;        // }        /// <summary>        /// 新手,引导吧...        /// </summary>        public virtual async CTask Guide()        {        }        public void Redo(int idx)        {            actionList[idx](null);        }        public void ClearList()        {            actionList.Clear();        }        /// <summary>        /// 是否全面屏        /// </summary>        /// <returns></returns>        public bool IsFullScreen()        {            float bl = Screen.width * 1.0f / Screen.height;            if (bl <= 0.5f)            {                return true;            }            return false;        }        /// <summary>        /// 之前引导是否被中断?        /// </summary>        /// <param name="length">引导长度</param>        /// <param name="key">当前步骤</param>        /// <returns></returns>        protected bool IsPhaseBreak(int length, int key)        {            step = GetPhaseStep(key);            //new do            if (step == -1)            {                return false;            }            else if (step != length - 1)            {                LogTool.Log("上次引导中断了: " + key + "-" + step);                return true;            }            else            {                return false;            }        }        protected bool IsPhaseDone(int length, int key)        {            step = GetPhaseStep(key);            if (step != -1)            {                FinishTriggerGuide(key);                return true;            }            return false;        }        protected void FinishTriggerGuide(int key)        {            PlayerGuideManager.Instance.ResetPlayerGuide();            PlayerGuideManager.Instance.FinishATriggerGuide();            LogTool.Log("已完成引导:" + key);        }        public int GetPhaseStep(int key)        {            if (AccountFileInfo.Instance.playerData.phaseKey.Contains(key))            {                int idx = AccountFileInfo.Instance.playerData.phaseKey.IndexOf(key);                return AccountFileInfo.Instance.playerData.phaseValue[idx];            }            else            {                return -1;            }        }        protected void SaveStep(int s)        {            //影子引导不记录.            if (PlayerGuideManager.Instance.curPhase == 66)            {                return;            }            PlayerGuideManager.Instance.curStep = s;            var phase = PlayerGuideManager.Instance.curPhase;            AccountFileInfo.Instance.playerData.curPhase = phase;            AccountFileInfo.Instance.playerData.curStep = s;            if (!AccountFileInfo.Instance.playerData.phaseKey.Contains(phase))            {                AccountFileInfo.Instance.playerData.phaseKey.Add(phase);                AccountFileInfo.Instance.playerData.phaseValue.Add(s);            }            else            {                var idx = AccountFileInfo.Instance.playerData.phaseKey.IndexOf(phase);                if (AccountFileInfo.Instance.playerData.phaseValue[idx] < s)                {                    AccountFileInfo.Instance.playerData.phaseValue[idx] = s;                }            }            LogTool.Log("guide message:" + "Phase=" + phase + "  Step=" + s);            AccountFileInfo.Instance.SavePlayerData();        }        public void SavePhase(int phase, int step = -1)        {            AccountFileInfo.Instance.playerData.curPhase = phase;            AccountFileInfo.Instance.playerData.curStep = step;            if (!AccountFileInfo.Instance.playerData.phaseKey.Contains(phase))            {                AccountFileInfo.Instance.playerData.phaseKey.Add(phase);                AccountFileInfo.Instance.playerData.phaseValue.Add(step);            }            else            {//            var idx = AccountFileInfo.Instance.playerSettingInfo.phaseKey.IndexOf(phase);//            AccountFileInfo.Instance.playerSettingInfo.phaseValue[idx] = step;                LogTool.Warning("已保存过该步骤:" + phase);            }            AccountFileInfo.Instance.SavePlayerData();        }        public void SaveForceDone()        {            AccountFileInfo.Instance.playerData.isForceDone = true;            AccountFileInfo.Instance.SavePlayerData();        }        public void SaveTriggerDone()        {            AccountFileInfo.Instance.playerData.isTriggerDone = true;            AccountFileInfo.Instance.SavePlayerData();        }        /// <summary>        /// 激活        /// </summary>        public virtual void Active()        {            isSkipGuide = false;        }        /// <summary>        /// 是否跳过本引导(一般是引导过期了)        /// </summary>        public bool isSkipGuide = false;        /// <summary>        /// 开始        /// </summary>        public virtual void Begin()        {            // if (uLockConfig.ulockCondition == 1)            // {            //     if (PlayerManager.Instance.curGuideGroupId != uLockConfig.ulockValue)            //     {            //         isSkipGuide = true;            //     }            // }            // else if (uLockConfig.ulockCondition == 2)            // {            //     if (PlayerManager.Instance.Level > uLockConfig.ulockValue)            //     {            //         isSkipGuide = true;            //     }            // }            //            // if (!isSkipGuide)            // {            //     if (IsPhaseDone(actionList.Count, guideID))            //     {            //         isSkipGuide = true;            //     }            // }        }        /// <summary>        /// 更新循环        /// </summary>        public virtual void LogicUpdate()        {        }        /// <summary>        /// 结束        /// </summary>        public virtual void End()        {                    }        /// <summary>        /// 释放逻辑,关闭        /// </summary>        public virtual void LogicRelase()        {            PlayerGuideManager.Instance.guideLogic = null;        }                public virtual void SkipGuide()        {            PlayerGuideManager.Instance.CloseForceGuide();        }    }}
 |