using System;
using System.Collections.Generic;
using Excel2Json;
using Fort23.UTool;
using UnityEngine.Device;
namespace Fort23.Mono
{
public abstract class IGuideLogic
{
// ///
// /// 是否是软性引导(还需要等待一些特殊的条件才触发的引导)
// ///
// public virtual bool issoftGuide => false;
///
/// 引导ID
///
public int guideID;
public int guideIdx = 0;
protected List> actionList = new List>();
protected int step;
public UnlockConfig uLockConfig;
public object ActionObject;
public PlayerGuideManager pgm;
// public IGuideLogic(PlayerGuideManager guideManager)
// {
// this.pgm = guideManager;
// }
///
/// 新手,引导吧...
///
public virtual async void Guide()
{
}
public void Redo(int idx)
{
actionList[idx](null);
}
public void ClearList()
{
actionList.Clear();
}
///
/// 是否全面屏
///
///
public bool IsFullScreen()
{
float bl = Screen.width * 1.0f / Screen.height;
if (bl <= 0.5f)
{
return true;
}
return false;
}
///
/// 之前引导是否被中断?
///
/// 引导长度
/// 当前步骤
///
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();
}
///
/// 激活
///
public virtual void Active()
{
isSkipGuide = false;
}
///
/// 是否跳过本引导(一般是引导过期了)
///
public bool isSkipGuide = false;
///
/// 开始
///
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;
// }
// }
}
///
/// 更新循环
///
public virtual void LogicUpdate()
{
}
///
/// 结束
///
public virtual void End()
{
}
///
/// 释放逻辑,关闭
///
public virtual void LogicRelase()
{
PlayerGuideManager.Instance.guideLogic = null;
}
public virtual void SkipGuide()
{
PlayerGuideManager.Instance.CloseForceGuide();
}
}
}