Files
JJBB/Assets/Project/Script/GUI/Guide/GuideLogic.cs

531 lines
14 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using Games.Item;
using System.Collections.Generic;
using GCGame.Table;
using Games.GlobeDefine;
public class GuideLogic : UIControllerBase<GuideLogic>
{
public GameObject _Back;
public Button _BtnBackClose;
public RectTransform _GuideInfo;
public Text _GuideTips;
public GameObject _GuideArrawLeft;
public GameObject _GuideArrawRight;
public GameObject _NewFuncInfo;
public Text _NewFunTips;
public Image _FuncImage;
public GameObject _BtnEffect;
public RectTransform _GuidePos;
private List<BtnFunc> _BtnFuncs = new List<BtnFunc>();
public List<BtnFunc> BtnFuncs
{
get
{
return _BtnFuncs;
}
}
private int _NextMissionID;
public int NextMissionID
{
get
{
return _NextMissionID;
}
set
{
_NextMissionID = value;
}
}
public void Awake()
{
SetInstance(this);
UpdateFunBtns();
}
public void SetForceBackActive(bool isActive)
{
_BtnBackClose.gameObject.SetActive(false);
if (isActive)
{
_Back.SetActive(true);
_Back.GetComponent<Image>().raycastTarget = true;
}
else
{
_Back.SetActive(false);
}
}
public void SetClickBack()
{
_BtnBackClose.gameObject.SetActive(true);
_Back.SetActive(false);
}
public void OnEnable()
{
_Back.SetActive(false);
_BtnBackClose.gameObject.SetActive(false);
_GuideInfo.gameObject.SetActive(false);
_NewFuncInfo.SetActive(false);
UpdateFunBtns();
InitGuideItems();
}
public void OnDestory()
{
SetInstance(null);
}
public void ShowGuideInfo()
{
_GuideInfo.gameObject.SetActive(true);
_NewFuncInfo.SetActive(false);
}
public void ShowNewFuncInfo()
{
_GuideInfo.gameObject.SetActive(false);
_NewFuncInfo.SetActive(true);
}
public void ShowGuideLeft()
{
_GuideArrawLeft.SetActive(true);
_GuideArrawRight.SetActive(false);
}
public void ShowGuideRight()
{
_GuideArrawLeft.SetActive(false);
_GuideArrawRight.SetActive(true);
}
public void ShowEffect(Vector3 pos)
{
//_BtnEffect.gameObject.SetActive(true);
//_BtnEffect.transform.position = pos;
}
public void HideEffect()
{
//_BtnEffect.transform.position = new Vector3(2000, 2000);
}
public void UpdateFunBtns()
{
if (Singleton<ObjManager>.Instance.MainPlayer == null || Singleton<ObjManager>.Instance.MainPlayer.BaseAttr.Level == 0)
{
Invoke("UpdateFunBtns", 1);
return;
}
_BtnFuncs = new List<BtnFunc>();
if (_BtnFuncs == null || _BtnFuncs.Count == 0)
{
if (FunctionButtonLogic.Instance())
{
_BtnFuncs.AddRange(FunctionButtonLogic.Instance().gameObject.GetComponentsInChildren<BtnFunc>(true));
}
if (FunctionExLogic.Instance())
{
_BtnFuncs.AddRange(FunctionExLogic.Instance().gameObject.GetComponentsInChildren<BtnFunc>(true));
}
}
CancelInvoke("UpdateFunBtns");
foreach (var btnFunc in GuideLogic.Instance().BtnFuncs)
{
//if (btnFunc._BtnList == null)
{
btnFunc.UpdateFuncState(btnFunc._functionOpenId);
}
}
if (ExtraFunTipRoot.Instance())
{
ExtraFunTipRoot.Instance().UpdateEquipEnhance();
}
}
#region start guide
private List<GuideItem> GuideItems = null;
private GuideItem _ActingGuideItem;
public bool IsActingGuide()
{
return _ActingGuideItem != null;
}
public void FinishGuide(GuideItem guideItem)
{
if (_ActingGuideItem == guideItem)
{
_ActingGuideItem = null;
}
}
public void InitGuideItems()
{
if (GuideItems != null)
return;
var items = GetComponentsInChildren<GuideItem>(true);
GuideItems = new List<GuideItem>(items);
for(int i = 0; i< GuideItems.Count; ++i)
{
GuideItems[i].InitSteps();
GuideItems[i].gameObject.SetActive(false);
//GuideItems[i]._GuideID = i + 1;
}
if (GameManager.gameManager.MissionManager.IsHaveMission(0)
&& Singleton<ObjManager>.GetInstance().MainPlayer != null
&& GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level == 1)
{
OnMissionAccept(0);
}
}
public static void OnMissionAcceptStatic(int missionID)
{
if (!GuideLogic.Instance())
{
return;
}
Hashtable hash = new Hashtable();
hash.Add("AcceptMissionID", missionID);
UIManager.ShowUI(UIInfo.GuideRoot, ShowUIOver, hash);
}
public static void OnMissionComplateStatic(int missionID,int nextMissionID)
{
if (!GuideLogic.Instance())
{
Debug.LogError("GuideLogic is null");
return;
}
Hashtable hash = new Hashtable();
hash.Add("ComplateMissionID", missionID);
hash.Add("NextMissionID", nextMissionID);
UIManager.ShowUI(UIInfo.GuideRoot, ShowUIOver, hash);
}
public static void MissionFindNext(int nextMissionID)
{
//原地寻路的话好像进不去 这边直接判断距离吧
GameManager.gameManager.MissionManager.MissionPathFinder(nextMissionID);
//这个不能放在前面,不然寻路逻辑有不执行的可能
if (!GuideLogic.Instance())
{
return;
}
if (_isShowCompleteMissionGuide)
_isShowCompleteMissionGuide = false; //完成任务时的指引解释后之后重置
GuideLogic.Instance().NextMissionID = -1;
GuideLogic._isSyncMisisonStateWhenShowCompleteMissionGuide = false;
}
public static void OnMissionStateStatic(int missionID)
{
if (!GuideLogic.Instance())
return;
Hashtable hash = new Hashtable();
hash.Add("MissionStateID", missionID);
UIManager.ShowUI(UIInfo.GuideRoot, ShowUIOver, hash);
}
public static void OnLevelUpStatic(int missionID)
{
if (!GuideLogic.Instance())
return;
Hashtable hash = new Hashtable();
hash.Add("LevelUp", missionID);
UIManager.ShowUI(UIInfo.GuideRoot, ShowUIOver, hash);
}
public static void OnOpenUIStatic(string uiName)
{
if (!GuideLogic.Instance())
return;
Hashtable hash = new Hashtable();
hash.Add("OpenUI", uiName);
UIManager.ShowUI(UIInfo.GuideRoot, ShowUIOver, hash);
}
public static void StartGuide(int idx)
{
if (idx == 0)
{
FinishGuide();
}
else
{
Hashtable hash = new Hashtable();
hash.Add("StartGuide", idx);
UIManager.ShowUI(UIInfo.GuideRoot, ShowUIOver, hash);
}
}
public static void FinishGuide()
{
if (!GuideLogic.Instance())
return;
GuideLogic.Instance().OnFinishGuide();
GuideLogic.Instance().FinishGuide(GuideLogic.Instance()._ActingGuideItem);
}
private static void ShowUIOver(bool sucess, object param)
{
if (!sucess)
return;
Hashtable hash = param as Hashtable;
if (hash == null)
return;
if (hash.ContainsKey("AcceptMissionID"))
{
GuideLogic.Instance().OnMissionAccept((int)hash["AcceptMissionID"]);
}
else if (hash.ContainsKey("ComplateMissionID"))
{
GuideLogic.Instance().OnMissionComplate((int)hash["ComplateMissionID"], (int)hash["NextMissionID"]);
}
else if (hash.ContainsKey("MissionStateID"))
{
GuideLogic.Instance().OnMissionState((int)hash["MissionStateID"]);
}
else if (hash.ContainsKey("LevelUp"))
{
GuideLogic.Instance().OnMissionLevelUp((int)hash["LevelUp"]);
}
else if (hash.ContainsKey("OpenUI"))
{
GuideLogic.Instance().OnOpenUI((string)hash["OpenUI"]);
}
else if (hash.ContainsKey("StartGuide"))
{
GuideLogic.Instance().OnStartGuide((int)hash["StartGuide"]);
}
}
public void OnFinishGuide()
{
if (_ActingGuideItem != null)
{
_ActingGuideItem.FinishGuide();
FinishGuide(GuideLogic.Instance()._ActingGuideItem);
}
}
public void OnMissionState(int missionID)
{
var missionState = (Games.Mission.MissionState)GameManager.gameManager.MissionManager.GetMissionState(missionID);
var trigGuide = GuideItems.Find((guideItem) =>
{
if (guideItem._TriggerMissionID == missionID)
{
if (missionState == Games.Mission.MissionState.Mission_None && guideItem._TriggerType == TriggerType.FinishMission)
{
return true;
}
}
return false;
});
if(trigGuide == null)
{
if(missionState == Games.Mission.MissionState.Mission_NotAccept)
{
if (_isShowCompleteMissionGuide)
{
NextMissionID = missionID;
return;
}
else
{
MissionFindNext(missionID);
}
}
}
}
public void OnMissionAccept(int missionID)
{
var trigGuide = GuideItems.Find((guideItem) =>
{
if (guideItem._TriggerType == TriggerType.AcceptMission && guideItem._TriggerMissionID == missionID)
return true;
return false;
});
if (trigGuide == null)
return;
if (_ActingGuideItem != null)
{
for (int i = 0; i < _ActingGuideItem._GuideSteps.Count; ++i)
{
_ActingGuideItem._GuideSteps[i].StopGuideStep();
}
}
_ActingGuideItem = trigGuide;
trigGuide.StartGuide();
}
public static bool _isSyncMisisonStateWhenShowCompleteMissionGuide = false; //是否正在显示指引的时候同步了任务状态(记录起来,在指引结束之后调用状态同步)
///完成任务的时候如果开启了指引那么AccpetMission的时候不能自动寻路要等指引结束
public static bool _isShowCompleteMissionGuide = false;
public void OnMissionComplate(int missionID, int nextMissionID)
{
var trigGuide = GuideItems.Find((guideItem) =>
{
if (guideItem._TriggerType == TriggerType.ComplateMission && guideItem._TriggerMissionID == missionID)
{
return true;
}
return false;
});
if (trigGuide == null)
{
//if(GuideLogic._isSyncMisisonStateWhenShowCompleteMissionGuide) //需要调用状态改变的处理
//{
// GuideLogic._isSyncMisisonStateWhenShowCompleteMissionGuide = false;
// GuideLogic.OnMissionStateStatic(nextMissionID);
//}
return;
}
_isShowCompleteMissionGuide = true;
if (_ActingGuideItem != null)
{
for (int i = 0; i < _ActingGuideItem._GuideSteps.Count; ++i)
{
_ActingGuideItem._GuideSteps[i].StopGuideStep();
}
}
_ActingGuideItem = trigGuide;
trigGuide.StartGuide();
}
public void OnMissionLevelUp(int missionID)
{
UpdateFunBtns();
var trigGuide = GuideItems.Find((guideItem) =>
{
if (guideItem._TriggerType == TriggerType.LevelUp && guideItem._TriggerMissionID == missionID)
return true;
return false;
});
if (trigGuide == null)
return;
if (_ActingGuideItem != null)
{
for (int i = 0; i < _ActingGuideItem._GuideSteps.Count; ++i)
{
_ActingGuideItem._GuideSteps[i].StopGuideStep();
}
}
_ActingGuideItem = trigGuide;
trigGuide.StartGuide();
}
public void OnOpenUI(string uiName)
{
UpdateFunBtns();
var trigGuide = GuideItems.Find((guideItem) =>
{
if (guideItem._TriggerType == TriggerType.UIOpen && guideItem._TriggetParam == uiName)
return true;
return false;
});
if (trigGuide == null)
return;
if (!trigGuide._RepeatGuide)
{
if (!Guide.Instance.IsCanActGuide(trigGuide._GuideID))
return;
}
if (trigGuide._LimitLv < GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Level)
{
return;
}
if (_ActingGuideItem != null)
{
for (int i = 0; i < _ActingGuideItem._GuideSteps.Count; ++i)
{
_ActingGuideItem._GuideSteps[i].StopGuideStep();
}
}
_ActingGuideItem = trigGuide;
trigGuide.StartGuide();
}
public void OnStartGuide(int missionID)
{
var trigGuide = GuideItems.Find((guideItem) =>
{
if (guideItem._GuideID == missionID)
return true;
return false;
});
if (trigGuide == null)
return;
if (_ActingGuideItem != null)
{
for (int i = 0; i < _ActingGuideItem._GuideSteps.Count; ++i)
{
_ActingGuideItem._GuideSteps[i].StopGuideStep();
}
}
_ActingGuideItem = trigGuide;
trigGuide.StartGuide();
}
public void UIClose(string uiName)
{
foreach (var guide in GuideItems)
{
if (uiName == guide._CloseUIFinish)
{
guide.CloseUI(uiName);
}
}
}
#endregion
}